IOC 概念和原理
1. 什么是 IOC?
控制饭庄( Inversion of Control ,缩写为 IOC),是面向对象编程中的一种设计原则,可以用来降低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入( Dependency Injection ,简称 DI ),还有一种方式叫“依赖查找”( Dependency Lookup )。通过控制反转,对象在被创建的时候,有一个调控系统内所有对象的外接实体将其所依赖的对象的引用传递给它。也可以说,以来被注入到对象中。
- 控制反转,把对象的创建和对象之间的调用过程,交给 Spring 进行管理
- 使用 IOC 的目的:为了耦合度降低
- 做入门的案例就是 IOC实现
2. IOC 的底层原理
- xml 解析、工厂模式、反射
3. 画图讲解 IOC 的底层原理
原始方式
class UserService {
execute () {
UserDao dao = new UserDao ();
dao.add();
}
}
class UserDao () {
add () {
...
}
}
这样子的话耦合度太高了
工厂模式
class UserService () {
execute () {
UserDao = UserFactory.getDao();
dao.add();
}
}
class UserDao () {
add () {
...
}
}
class UserFactory {
public ststic UserDao getDao () {
return new UserDao();
}
}
IOC 过程
- 第一步 xml配置文件,配置创建的对象
<bean id = "user" class = "com.fairykunkun.User"></bean>
- 第二步 有 service 类和 dao 类,创建工厂类
class UserFactory {
public ststic UserDao getDao () {
String classValue = class 属性值; // xml 解析
Class clazz = Class.forName(classValue);// 通过反射创建对象
return (UserDao)clazz.newInstance ();
}
}
这样子就把我们的耦合度做了进一步的降低
IOC 接口
1. IOC 思想基于 IOC 容器完成, IOC 容器底层就是对象工厂
2. Spring 提供了 IOC 容器实现的两种方式:(两个重要的接口)
(1) BeanFactory : IOC 容器基本实现,是 Spring 内部的使用接口,不提供开发人员进行使用
注意: BeanFactory 在加载配置文件的时候不会创建对象,在使用对象或者获取对象的时候才会去创建对象
(2) ApplicationContext: BeanFactory 接口的子接口,提供更多强大的功能,一般是由开发人员进行使用的
注意: ApplicationContext 在加载配置文件的时候就已经创建好对象了
- 一般来讲,耗时耗资源的操作在项目启动的时候处理好是最合适的,所以我们一般会选择 ApplicationContext 来进行操作
ApplicationContext 接口有实现类
我这个目前用的是最新版的 Spring ,所以就长这样
- 这个文件我们用的时候,要写上我们的配置文件的名称