一. IOC概念
控制反转(Inversion of Control,缩写为IOC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
(1)控制反转,把对象创建和对象之间的调用过程,交给 Spring进行管理
(2)使用 IOC目的:为了耦合度降低
(3)做入门案例就是 IOC 实现
二. IOC底层原理
- 底层原理由三个部分实现包括:xml 解析,工厂模式,反射
程序设计要求高内聚,低耦合
(1) 原始的方法调用——耦合度太高
(2)工厂模式——降低了user和UserService之间的耦合程度,但是仍然有一定的耦合程度
(3)为了进一部降低耦合度——IOC思想
第一步XML配置文件,第二步有service和dao类,创建工厂类。
三 . IOC接口
1.IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
2.Spring提供IOC容器实现的两种方式——2个接口
(1)BeanFactory接口
BeanFactory是IOC容器基本实现,是 Spring内部的使用接口,不提供开发人员进行使用 * 加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象。所以一一般不去使用。
/*一个例子*/
public class testSpring {
//新建测试单元
@Test
public void testUser(){
//1.加载Spring配置文件
//ApplicationContext context=
BeanFactory context=
new ClassPathXmlApplicationContext("bean1.xml");
//2.获取创建对象
User user=context.getBean("user", User.class);
//3.执行方法
System.out.println(user);
user.HelloSpring();
}
}
(2)ApplicationContext 接口
BeanFactory 接口的子接口,提供更多更强大的功能,一般由开发人 员进行使用 * 加载配置文件时候就会把在配置文件对象进行创建
/*一个例子*/
public class testSpring {
//新建测试单元
@Test
public void testUser(){
//1.加载Spring配置文件
ApplicationContext context=
new ClassPathXmlApplicationContext("bean1.xml");
//2.获取创建对象
User user=context.getBean("user", User.class);
//3.执行方法
System.out.println(user);
user.HelloSpring();
}
}
(3) 二者的差异:
BeanFactory 在使用的时候才会创建对象,而ApplicationContext 在加载的时候就能创建对象。在实际项目中,一般将这种耗时耗力的过程在服务器启动的时候就加载完成,所以一般使用ApplicationContext来实现IOC。
3.ApplicationContext接口实现类和BeanFactory的接口实现类
Ctrl+H查看实现类
- 主要包括两个类:ClassPathXmlApplicationContext和FileSystemXmlApplicationContext
- ClassPathXmlApplicationContext用于获取上下文对象,参数为Src目录下的文件路径名
- FileSystemXmlApplicationContext用于获取上下文对象,参数为实际目录的路径,从盘符开始