Spring IoC 的工作流程

概况

        IOC 是什么

        Bean 的声明方式

        IOC 的工作流程


 IOC 是什么

        IOC 的全称是 Inversion Of Control, 也就是控制反转,它的核心思想是把对象的管理权限交给容器。

        应用程序如果需要使用到某个对象实例,直接从 IOC 容器中去获取就行,这样设计的好处是降低了程序里面对象与对象之间的耦合性。,使得程序的整个体系结构变得更加灵活。

Spring IoC 的工作流程_第1张图片

Spring IoC 的工作流程_第2张图片


Bean 的声明方式       

         Spring 里面很多方式去定义 Bean,如下图,比如 XML 里面的标签、@Service、

@Component、@Repository、@Configuration 配置类中的@Bean 注解等等。 Spring 在启动的

时候,会去解析这些 Bean 然后保存到 IOC 容器里面。

        Spring IoC 的工作流程_第3张图片


IOC 的工作流程

        Spring IOC 的工作流程大致可以分为两个阶段。

第一个阶段,就是 IOC 容器的初始化

        这个阶段主要是根据程序中定义的 XML 或者注解等 Bean 的声明方式 (如下图)通过解析和加载后生成 BeanDefinition,然后把 BeanDefinition 注册到 IOC 容器。

Spring IoC 的工作流程_第4张图片

        通过注解或者 xml 声明的 bean 都会解析得到一个 BeanDefinition 实体,实体中包含这个

bean 中定义的基本属性。 最后把这个 BeanDefinition 保存到一个 Map 集合里面,从而完成了

IOC 的初始化。 IOC 容器的作用就是对这些注册的 Bean 的定义信息进行处理和维护,它是 IOC

容器控制反转的核心。


第二个阶段,完成 Bean 初始化及依赖注入

        然后进入到第二个阶段,这个阶段会做两个事情:

                 1. 通过反射针对没有设置 lazy-init 属性的单例 bean 进行初始化。

                 2. 完成 Bean 的依赖注入


第三个阶段,Bean 的使用 

        通常我们会通过@Autowired 或者 BeanFactory.getBean(),从 IOC 容器中获取指定的 bean 实例。

        另外,针对设置 layy-init 属性以及非单例 bean 的实例化,是在每次获取 bean 对象的时候,调用 bean 的初始化方法来完成实例化的,并且 Spring IOC 容器不会去管理这些 Bean。

        Spring IoC 的工作流程_第5张图片

你可能感兴趣的:(Java,spring,java,后端)