Spring IOC工作流程

Spring IOC工作流程

IOC是什么

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

Spring IOC工作流程_第1张图片

Spring IOC工作流程_第2张图片

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

Bean的声明方式

Spring里面提供了很多方式去声明一个Bean,比如在XML配置文件里面,通过< Bean >的标签,或者通过@Service注解,或者通过@Configuration配置类里面,通过@Bean注解去声明,等等

Spring IOC工作流程_第3张图片

那么Spring在启动时,会去解析这些Bean,然后保存到IOC容器里

IOC的工作流程

大致可以分为两个阶段

  • IOC容器的初始化阶段,这个阶段主要是根据程序里面定义的XML或者注解等Bean的声明方式,通过解析和加载后生成BeanDefinition,然后把BeanDefinition注册到IOC容器里面,通过注解或XML声明的Bean,都会解析得到一个BeanDefinition实体,这个实体会包含bean的定义以及一些基本属性,最后把这个BeanDefinition保存到一个map集合里面,从而去完成IOC的初始化,IOC容器的作用呢,就是对这些注册的Bean的定义信息进行处理和维护,它是IOC容器控制反转的一个核心

Spring IOC工作流程_第4张图片

  • 完成Bean的初始化和依赖注入,这个阶段主要做两个事情

Spring IOC工作流程_第5张图片

  1. 通过反射去针对没有设置lazy-init属性的单例bean进行初始化
  2. 完成bean的依赖注入
  3. Bean的使用,@Autowired(不建议,建议采用构造函数注入,加上@Lazy注解来支持循环依赖,进行依赖注入),或者通过BeanFactory.getBean(),从IOC容器里面去获取一个指定的bean的实例,另外针对设置了lazy-init属性以及非单例bean的一个实例化,是在每一次获取bean对象的时候,调用bean的初始化方法来完成实例化的,并且Spring IOC容器不会去管理这些bean

Spring IOC工作流程_第6张图片

你可能感兴趣的:(spring,java,spring,boot)