温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Spring复杂对象怎么创建

发布时间:2022-01-13 21:05:37 来源:亿速云 阅读:123 作者:iii 栏目:开发技术

本文小编为大家详细介绍“Spring复杂对象怎么创建”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring复杂对象怎么创建”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

什么是复杂类型,比如连接数据库的Connection对象,以及Mybatis中的SqlSessionFactory对象。
在以前我们是通过这种方式获取Connection对象的:

Connection conn = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql", "root", "123456");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }

现在使用Spring如何创建这种类型的对象?Spring中提供了三种方法来创建复杂对象

第一种:实现FactoryBean接口

public class ConnectionFactoryBean implements FactoryBean<Connection> {
    //用于书写创建复杂对象的代码
    @Override
    public Connection getObject() throws Exception {
        Class.forName(driverClassName);
        Connection conn = DriverManager.getConnection(url, username, password);
        return conn;
    }
    @Override
    public Class<?> getObjectType() {
        return Connection.class;
    }
    @Override
    public boolean isSingleton() {
        return true;
    }
    private String driverClassName;
    private String url;
    private String username;
    private String password;
	//setter and getter省略

在applicationContext.xml配置文件中

<bean id="conn" class="com.liu.factorybean.ConnectionFactoryBean">
            <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/mysql?useSSL=false"/>
            <property name="username" value="root"/>
            <property name="password" value="123456"/>
</bean>

对这种使用的解读:FactoryBean接口中有三个抽象方法

Spring复杂对象怎么创建

○ 如果就想获得FactoryBean类型的对象 ctx.getBean("&conn")
获得就是ConnectionFactoryBean对象
○ isSingleton方法
  返回 true 只会创建一个复杂对象
  返回 false 每一次都会创建新的对象
  问题:根据这个对象的特点 ,决定是返回true (SqlSessionFactory) 还是 false (Connection)
○ mysql高版本连接创建时,需要制定SSL证书,解决问题的方式
注意:类中的几个连接数据库的属性,是自己添加的,便于在配置文件中注入,实现解耦合。

第二种方法:实例工厂 避免Spring框架的侵入整合遗留系统

直接在这个类写创建复杂对象的方法,不用实现FactoryBean接口。

public class ConnectionFactory {

    public Connection getConnection(){
        Connection conn = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql", "root", "123456");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
}

但是要在配置文件中进行配置

<!--ConnectionFactory实例 -->
 <bean id="connFactory" class="com.liu.factorybean.ConnectionFactory"></bean>
 <!--在factory-bean中应用ConnectionFactory实例id connFactory -->
 <bean id="conn"  factory-bean="connFactory" factory-method="getConnection"/>

第三种方式:静态工厂

和实例工厂类似,只不过这里把实例方法,替换为静态方法。

public class StaticConnectionFactory {
    public static Connection getConnection(){
        Connection conn = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql", "root", "123456");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
}

对应配置文件配置如下:

<bean id="conn" class="com.liu.factorybean.StaticConnectionFactory" factory-method="getConnection"/>

读到这里,这篇“Spring复杂对象怎么创建”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI