IOC容器
- IOC思想就是控制反转
- 获取资源的传统方式
- 用做菜吃饭举例子,我们需要自己买菜,洗菜,切菜,炒菜,我们参与全过程还要会做菜,才能吃放
- 在应用程序中,传统的方式就是组件主动向容器获取资源,这样的话我们在使用组件的时候还要知道是哪个容器有我们想要的资源,怎么获取容器中的资源等,麻烦!
- 反转控制的方式
- 还是吃饭的例子,这个就相当于点外卖,下单,等,吃就完事了
- 由容器主动向组件提供资源,不需要我们自己来获取,舒舒服服
- DI(依赖注入)
- DI就是IOC的一种具体实现方式
- 比如我如果一个类有一个成员变量,它是一个实体类型属性,那就需要new一个对象,使用DI就不需要new一个对象,由IOC容器来注入这个对象,一般通过我们提前设置好的方式来注入
- 准备工作,导入依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.19</version>
</dependency>
- IOC容器在Spring中的实现
- Spring的IOC容器就是IOC思想的一种实现,IOC容器中管理的组件也叫做bean,在创建bean之前,要创建IOC容器。在Spring中有两种IOC容器的实现方式
- BeanFacory
- 这是IOC容器的基本实现,是Spring Core的核心,只在spring内部使用
- ApplicationContext
- 基于BeanFactory,拥有更多的高级特性的IOC容器(用的多)
- ApplicationContext两种基于XML实现类
- FileSystemXmlApplicationContext
- ClassPathXmlApplicationContext
- 这两者的区别在于第一个是通过文件系统来寻找Xml配置文件,通过文件的特定路径(绝对路径和相对路径)来找Xml
- 后者通过类路径来找Xml配置文件,这里的类路径就是指的是target下面的classes的路径(用的多,因为应用程序的运行环境不同,第二种获取方式更常用)
- ConfigurableApplicationContext
- ApplicationContext的子接口,提供了一些扩展方法比如refresh()和close(),让ApplicationContext具有启动,关闭和刷新上下文的功能
- WebApplicationContext
- 专门为Web应用准备的,基于Web环境创建IOC容器对象,并将对象引入存入ServletContext