SpringIOC
IOC控制反转Inversion of Control
把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
可以理解为使用了工厂设计模式,将需要管理创建的对象都交由spring容器进行管理,我们在使用时可以直接向spring发送请求获取对应的对象。
1.1 spring实例对象的三种方式
1) 使用无参构造方法实例化
它会根据默认无参构造方法来创建类对象,如果bean中没有默认无参构造函数,将会创建失败(jvm会自动进行无参构造方法创建,如果构造方法私有会自动进行授权)
<bean id="userDao" class="com.yunhe.dao.impl.UserDaoImpl"></bean>
2) 工厂静态方法实例化
书写创建工厂并提供获取对应对象的静态方法
public class StaticFactoryBean {
public static UserDao createUserDao(){
return new UserDaoImpl();
}
public static UserDao createOracleUserDao(){
return new UserOracleDaoImpl();
}
}
将创建对象的工厂交由sping进行管理
<bean id="userDao" class="com.yunhe.test.StaticFactoryBean" factory-method="createUserService"></bean>
3) 工厂实例方法实例化
书写创建工厂对象并书写获取对应对象的实例方法
public class DynamicFactoryBean {
public UserDao createUserService(){
return new UserDaoImpl();
}
public UserDao createOracleUserService(){
return new UserOracleDaoImpl();
}
}
由于工厂方法需要先实例化工厂对象才能调用,所以需要先使用spring管理工厂对象的创建,之后使用工厂对象的方法进行指定对象的创建
<!-- 先将工厂交由spring管理 创建工厂对象 -->
<bean id="factoryBean" class="com.yunhe.test.DynamicFactoryBean"></bean>
<!-- 调用对应工厂实例对象 对应方法创建对象 -->
<bean id="userDao" factory-bean="factoryBean" factory-method="createOracleUserService" ></bean>