IOC:Inversion Of Control,反转控制。
获取资源的传统方式:
在程序组件中需要获取资源时,传统方式我们需要主动的从容器中去获取资源,这种模式要求开发人员了解特定资源在具体容器中的获取的方法。开发效率较低,学习成本高。
例:想要吃饭,传统方式:买菜——>洗菜——>切菜——>炒菜——>吃饭。
IOC思想获取资源
反转控制思想与传统获取资源方式相反,改为由容器主动提供资源,开发人员只要做好接受准备即可,无需了解资源获取的具体方法。开发效率高,学习成本较低。
例:想要吃饭,IOC方式:点外卖——>拿外卖——>吃饭。
DI(Dependancy Injection)
依赖注入,Spring对IOC思想的实现方式。简单来说就是你想吃饭但是不想做饭(IOC),所以你点外卖(DI)。
DI的实现解释实现就是通过预先设计好的方式接受容器资源的注入。
IOC容器就是IOC思想在Spring的一个罗德实现,IOC容器中管理的组件叫做bean,创建bean之前要先创建IOC容器。当你不想做饭时,DI是点外卖是一种方法,那么IOC就是商家,bean就是商家做出来的饭。
构建IOC容器有两种方法:
1、BeanFactory
BeanFactory是IOC容器的基本实现,是Spring内部使用,开发人员无法调用。
2、ApplicationContext
ApplicationContext是BeanFactory的子接口,拥有更多的功能,提供给开发人员使用。(具体结构如下图)
类型名 | 功能介绍 |
---|---|
ConfigurableApplicationContext | ApplicationContext的子接口,实现了启动、关闭和刷新上下文的功能。 |
FileSystemXmlApplicationContext | 通过读取文件路径来创建IOC容器。 |
ClassPathXmlApplicationContext | 通过读取类路径来创建IOC容器。 |
WebApplicationContext | 专门为Web应用准备,基于Web环境创建IOC容器对象,并将其存放在ServletContext域中。 |
①引入maven依赖:
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>5.3.20version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
②在resource下建立Spring配置文件:
建议命名为:applicationContext
③在配置文件中配置组件
④测试
@Test
public void test(){
//1.获取ApplicationContext
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.获取指定类对象
Student student = (Student) applicationContext.getBean("student");
System.out.println(student);
}
结果:(成功获取)
可以看到,获取bean的方法根据参数不同划分为5中,这里我们说明常用的三种。
方法 | 说明 |
---|---|
getBean(String s) | 传入配置文件中对应的id获取Object对象,再进行转换为所需对象。 |
getBean(Class aClass) | 传入要获取的类型,无需转换类型。(要求配置文件中该类型的bean唯一) |
getBean(String s, Class aClass) | 传入配置文件中对应的id和类型,直接获取所需对象。 |