1.什么是复杂对象??
复杂对象:指的就是不能直接通过new构造方法创建的对象
Connection
SqlSessionFactroy
2.spring工厂创建复杂对象的3种方式
2.1 FactroyBean 接口
# 如果Class中指定的类型 是FactoryBean接口的实现 类,那么通过id值获得的是这个类所创建的复杂对象
Connection<bean id="conn"
class="com.baizhiedu.factorybean.ConnectionFactoryBean"/>
- 细节
1.如果想获得FactoryBean类型的对象ctx.getBean("&coon")
获得的就是ConnectionFactoryBean对象
2.isSingleton方法
返回true只会创建一个复杂对象
返回false每一次都会创建新的对象
问题:根据这个对象的特点,决定是返回true还是false
3.mysql高版本创建连接时,需要指定SSL整数,解决问题的方式
url = "jdbc:mysql://localhost:3306/wangze?useSSL=false"
依赖注入的体会
把ConnectionFactoryBean中依赖的4个字符串信息 ,进行配置文件的注入
好处:解耦合
<bean id="conn" class="com.baizhiedu.factorybean.ConnectionFactoryBean">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/wangze?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
FactoryBean的实现原理[简易版]
接口回调
1. 为什么Spring规定FactoryBean接口 实现 并且 getObject()?
2. ctx.getBean("conn") 获得是复杂对象 Connection 而没有 获得 ConnectionFactoryBean(&)
3. Spring内部运行流程
1. 通过conn获得 ConnectionFactoryBean类的对象 ,进而通过instanceof 判断出是FactoryBean接口的实现类
2.Spring按照规定 getObject() ---> Connection
3. 返回Connection
FactoryBean总结
Spring中用于创建复杂对象的一种方式,也是Spring原生提供的,后续讲解Spring整合其他框架,大量应用FactoryBean
2.2 实例工厂
1. 避免Spring框架的侵入
2. 整合遗留系统
- 开发步骤
<bean id="connFactory" class="com.baizhiedu.factorybean.ConnectionFactory"></bean>
<bean id="conn" factory-bean="connFactory" factory-method="getConnection"/>
2.3 静态工厂
-
开发步骤
<bean id="conn" class="com.baizhiedu.factorybean.StaticConnectionFactory" factory-method="getConnection"/>