[toc]

1. Spring IOC容器

1.1 IOC和DI

  • IOC(Inversion of Control):反转控制
  • DI(Dependency Injection):依赖注入
  • IOC 就是一种反转控制的思想, 而DI是对IOC的一种具体实现。

1.1.1 IOC(Inversion of Control):反转控制

  • 即控制权的转移,将我们创建对象的方式反转了,以前对象的创建是由我们开发人员自己维护,包括依赖关系也是自己注入。使用了spring之后,对象的创建以及依赖关系可以由spring完成创建以及注入,反转控制就是反转了对象的创建方式,从我们自己创建反转给了程序创建(spring)

1.1.2 DI(Dependency Injection):依赖注入

  • spring这个容器中,替你管理着一系列的类,前提是你需要将这些类交给spring容器进行管理,然后在你需要的时候,不是自己去定义,而是直接向spring容器索取,当spring容器知道你的需求之后,就会去它所管理的组件中进行查找,然后直接给你所需要的组件.

1.1.3 IOC容器在Spring中的实现

  1. 前提: ==Spring中有IOC思想, IOC思想必须基于 IOC容器来完成, 而IOC容器在最底层实质上就是一个对象工厂。==
  2. 在通过IOC容器读取Bean的实例之前,需要先将IOC容器本身实例化。
  3. Spring提供了IOC容器的两种实现方式
    1. **BeanFactory**:IOC容器的基本实现,是Spring内部的基础设施,是面向Spring本身的,不是提供给开发人员使用的。
    2. **ApplicationContext**:BeanFactory的子接口,提供了更多高级特性。面向Spring的使用者,几乎所有场合都使用ApplicationContext而不是底层的BeanFactory。
  4. image-20200514224642154

1.1.4 ApplicationContext的主要实现类

  1. ConfigurableApplicationContext :是ApplicationContext的子接口,包含一些扩展方法**refresh()和close()**:让ApplicationContext具有启动、关闭和刷新上下文的能力。
  2. **ClassPathXmlApplicationContext:对应类路径下**的XML格式的配置文件
  3. **FileSystemXmlApplicationContext:对应文件系统**中的XML格式的配置文件
  4. 在初始化时就创建单例的bean,也可以通过**配置的方式指定创建的Bean是多实例的**。
  5. WebApplicationContext : 专门为WEB应用而准备的,它允许从相对于WEB根目录的路径中完成初始化工作

1.1.5 容器的结构图

image-20200514230104015