Spring中几个关键点的入口,包含:
配置文件读取
配置类加载解析BeanDefinition
单例Bean创建
配置参数解析注入到Bean
AutoWired自动注入
Environment
1.ResourceLoader
2.PropertySourceLoader
3.EnvironmentPostProcessor
4.ConfigFileApplicationListener
5.Resource
6.PropertySource
作用:配置文件的读取,解析
@Configuration解析
ConfigurationClassPostProcessor implements BeanFactoryPostProcessor
对配置类的解析,包含@ComponmentScan ,@Bean,... 的解析
作用:beanDefinition
AbstractAutowireCapableBeanFactory
创建对象的doCreateBean方法
实例化:
AbstractAutowireCapableBeanFactory.doCreateBean() 创建Bean实例
依赖注入
AbstractAutowireCapableBeanFactory.populateBean() 注入依赖
初始化
AbstractAutowireCapableBeanFactory.initializeBean() 调用Bean的初始化方法
作用: 实例化Bean的过程
@Autowired 解析
AutoWiredAnnotationBeanPostProcessor 实现了 InstantiationAwareBeanPostProcessor
在populateBean()中被调用,给实例化的bean注入属性
实例化之后注入属性-> 初始化及相关的BeanPostProcessor
注意:这里的注入并非是构造器注入和setter注入,所以即使没有setter方法也可以注入完成
作用: 注入依赖的Bean
Environment->Bean内的数据
ConfigurationPropertiesBindingPostProcessor
postProcessBeforeInitialization()在调用初始化方法之前执行,参数值的注入
从其中找到匹配的配置项绑定到bean的属性上去的
作用:解析配置到Bean
AutoWiredAnnotationBeanPostProcessor优先于ConfigurationPropertiesBindingPostProcessor