1.什么是IOC
(1)控制反转,把对象创建和对象之间的调用过程,交给spring进行管理
(2)使用IOC的目的:为了降低耦合度 (IOC是理论,DI是实现)
实例:设计两个类(UserService)和(UserDao)
public class UserService {
execute(){
UserDao dao = new UserDao();
}
}
public class UserDao {
add(){
......
}
}
直接调用耦合太高直接调用耦合太高
所以我们使用工厂模式进一步降低耦合,创建一个(UserFactory)类
class UserFactory{
public static UserDao getDao(){
return new UserDao();
}
}
UserService类改为调用UserFactory.getDao();
public class UserService {
execute(){
UserDao dao = UserFactory.getDao();
}
}
但是我们还可以继续降低耦合度:使用IOC
2.IOC底层原理
1xml解析,工厂模式,反射
第一步 xml配置文件
<bean id="dao" class="com.wh.UserDao"></bean>
第二步 有service类和dao类,创建工厂类,进一步降低耦合
class UserFactory{
public static UserDao getDao(){
String classValue = class属性值; //xml解析
Class clazz = Class.forName(classValue);/通过反射创建对象
return (UserDao)clazz.newInstance();
}
}
3.IOC(接口)
1.IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
2.Spring提供IOC容器实现两种方式:(两个接口)
- BeanFactory:IOC容器基本实现,是Spring内部的使用接口,不提供开发人员使用,加载配置文件时候不会创建对象,在获取对象被使用时创建
- ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员使用,加载配置文件时候就会把配置文件对象进行创建
(因为运行在服务器中,在服务器启动时就应该完成)
ApplicationContext接口实现类:
- FileSystemXmlApplicationContext
- ClassPathXmlApplicationContext