目录
- 一、定义
- 二、Bean的声明方式
- 三、IOC的工作流程
一、定义
IOC
:全称是 Inversion Of Control,也就是控制反转,它的核心思想是把对象的管理权限交给容器。应用程序如果需要使用某个对象的实例,那么直接从 IOC 容器里面去获取就可以了。
传统应用程序 vs IOC控制反转:
这种设计的好处在于降低了对象与对象之间的耦合性,使得程序的整个体系结构变得更加灵活。
二、Bean的声明方式
Spring 里面提供了很多方式去声明一个 Bean,比如说在 XML 配置文件里面通过 <bean>
标签、 @Service
注解、@Configuration
配置类中的 @Bean
注解去声明等等。
Spring 在启动过程中会去解析这些 Bean,然后保存到 IOC 容器里面。
三、IOC的工作流程
Spring 中 IOC 的工作流程大致可以分为三个阶段:
-
IOC 容器的初始化阶段: 这个阶段主要是根据程序里面定义的
XML
或者注解等 Bean 的声明方式,通过解析和加载后生成BeanDefinition
实体,然后把 BeanDefinition 注册到 IOC 容器中。生成的 BeanDefinition 实体中会包含 Bean 的一些定义和基本属性。最后,把这个 BeanDefinition 保存到一个 Map 集合里面,从而去完成 IOC 的初始化。
IOC 容器的作用就是对这些注册的 Bean 的定义信息进行处理和维护,这是 IOC 容器实现控制反转的核心。
-
完成 Bean 的初始化和依赖注入: 进入第二个阶段以后,这个阶段会做两件事:
1)通过反射去针对没有设置
lazy-init
属性的单例 Bean 进行初始化;2)完成 Bean 的依赖注入。
-
Bean 的使用: 通常我们会通过
@Autowired
这样一个注解,或者通过BeanFactory.getBean()
从 IOC 容器里面去获取一个指定的 Bean 实例。另外,针对设置了
lazy-init
属性以及非单例 Bean 的实例化,是在每一次获取 Bean 对象的时候,调用 Bean 的初始化方法来完成实例化的。并且 Spring IOC 容器不会去管理这些 Bean。
整理完毕,完结撒花~ 🌻