什么是复杂对象?
复杂对象是指我们通过new创建不了的对象,此对象的创建还需要别的条件,如jdbc的Connection、mybatis的sqlSesscionFactory。
一、factoryBean接口 :spring提供的原生创建复杂对象的方式
实现spring提供的facrotyBean接口,实现FactoryBean三个方法:
public class XxxFactoryBean implements FactoryBean {
@Override
public Object getObject() throws Exception {
return null;
}
@Override
public Class<?> getObjectType() {
return null;
}
@Override
public boolean isSingleton() {
return false;
}
}
1、getObject():该方法用于返回复杂对象的实例,在该方法中添加创建复杂对象的代码。
2、getObjectType():返回复杂对象的class。
3、isSingleton():返回true或false,true指单例创建该对象,false多例。
二、实例工厂
区别:
由实例创建出复杂对象。
好处:
1.避免spring框架的倾入(不需要spring提供FantoryBean接口了)
2.整合遗留系统
<!-- 实例工厂创建复杂对象 -->
<!-- 实例工厂 -->
<bean id="connFactory" class="com.sms.factory.ConnectionFactory"></bean>
<!-- 对实例的引用后调用实例方法创建 复杂对象 -->
<bean id="conn" factory-bean="connFactory" factory-method="getConn"></bean>
三、静态工厂
区别:
由类调用静态方法创建复杂对象。少了一步创建工厂实例bean。
<!--静态工厂-->
<bean id="conn" class="com.sms.factory.StaticConnFactory" factory-method="getConn"></bean>