SpringIOC的加载原理

IOC控制反转,也成为依赖注入(DI),是一个定义对象依赖的过程,对象只和 构造参数,工厂方法参数,对象实例属性或工厂方法返回相关。容器在创建这些Bean的时候注入这些依赖。这个过程是一个反向的过程,所以命名为依赖反转,对象实例的创建由其提供的构造方法或服务定位机制来实现。这样做最大的好处就是解耦。

Spring把创建Bean的工作交给BeanFactory,那么它到底是怎么创建Bean的呢?

1)加载配置,有两种方式,分别是xml文件配置和注解配置:

由ClassXmlPathApplicationContext去加载配置好的xml文件,或者由AnnotationConfigApplicationContext去加载一个JavaConfig(其实是一堆注解)得到Spring上下文ApplicationContext

2)Bean定义:

ApplicationContext会调用BeanDefinitionReader(读取所有的Bean)、BeanDefinitionScanner(扫描到合格的Bean)、BeanDefinitionRegistry(注册合格的Bean),

然后得到BeanDefinition(Bean定义)

3)BeanFactory拿到BeanDefinition后,会根据这些Bean的特性创建出所需要的Bean了

4)实例化Bean,依赖反射

5)填充属性,比如@Value、@AutoWired等

6)初始化Bean,调用initMethod等(在初始化后,会调用很多的Aware接口,比如BeanNameAware、BeanClassLoaderAware、BeanFactoryAware等)

7)放入对象池等待使用,也就是一级缓存

当然,这其中有很多步骤,没有详细列出来,比如扩展节点,在Bean定义前Spring允许我们自主去注册Bean(实现BeanDefinitionRegistryPostProcessor-Bean定义的后置处理器),

在BeanFactory创建Bean前Spring允许我们自主去修改Bean定义(实现BeanFactoryPostProcessor-BeanFactory的后置处理器)

上一篇:【Spring】整体架构及模块依赖关系


下一篇:ES6 函数的扩展-rest参数