介绍下Spring IOC的工作流程?

1,605 阅读2分钟

这个问题我从三个方面来回答

  • IOC是什么
  • Bean的声明方式
  • IOC的工作流程

1、IOC也就是控制反转,它的核心思想是把对象的管理权限交给容器。当我们的应用程序需要使用都某个对象实例,直接从IOC容器去获取就行,这样设计的好处是降低了程序里面对象与对象之间的耦合性。使得程序的整个体系结构变得更加灵活。

2、Spring里面很多方式去定义Bean,比如xml里面的标签、@Service、@Component、@Repository、@Configuration配置类中的@Bean注解等等。Spring在启动的时候,会去解析这些Bean然后保存在IOC容器里面。

3、Spring IOC的工作流程大致可以分为三个阶段

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

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

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

最后把这个BeanDefinition保存到一个Map集合里面从而实现IOC的初始化

IOC容器的作用就是对这些注册的Bean的定义信息进行处理和维护,也是IOC容器控制反转的核心

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

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

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

② 完成bean的依赖注入

第三个阶段,Bean的使用

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

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

以上就是我对Spring IOC的理解