本文小编为大家详细介绍“spring复杂对象怎么创建”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring复杂对象怎么创建”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是复杂类型,比如连接数据库的Con
本文小编为大家详细介绍“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中提供了三种方法来创建复杂对象
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接口中有三个抽象方法
○ 如果就想获得FactoryBean类型的对象 ctx.getBean("&conn")
获得就是ConnectionFactoryBean对象
○ isSingleton方法
返回 true 只会创建一个复杂对象
返回 false 每一次都会创建新的对象
问题:根据这个对象的特点 ,决定是返回true (SqlSessionFactory) 还是 false (Connection)
○ mysql高版本连接创建时,需要制定SSL证书,解决问题的方式
注意:类中的几个连接数据库的属性,是自己添加的,便于在配置文件中注入,实现解耦合。
直接在这个类写创建复杂对象的方法,不用实现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复杂对象怎么创建”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。
--结束END--
本文标题: Spring复杂对象怎么创建
本文链接: https://lsjlt.com/news/307049.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0