Spring Bean Definition 全过程
2021-02-08 18:04:00 18 举报
spring bean definition 的全过程,还没有到创建对象那一步,仅仅是注册到 BeanFacotry 中;
作者其他创作
大纲/内容
5.执行ConfigurationClassParser#parse() 方法#doProcessConfigurationClass()方法解析配置类
10.遍历所有的 Resource 可以理解为是每一个类
6.获取配置类的注解 @ComponentScans@ComponentScan
13.如果满足条件,则创建一个bean定义对象ScannedGenericBeanDefinition
20.解析@Import 注解
如果满足上面的任何一个条件,则当成配置类进行解析
17.如果当前类有 @Component 注解,则递归处理内部类
如果想知道 Bean 的定义全过程,可以反向推理,从 DefaultListableBeanFactory 类中的 #registerBeanDefinition()方法进行分析基于:Spring 5.2.4.RELEASE 测试
19.解析 @ComponentScan @ComponentScans
4.执行ConfigurationClassPostProcessor配置类处理器的方法
11.判断是否为符合候选条件的组件,即:是否标注 @Component 注解或者基于它的meta注解@Service@Controller@Repostirory
1.AbstractApplicationContext#refresh()#invokeBeanFactoryPostProcessors()
所以我定义的一个标注了@Component 注解的类,在这里也变成了配置类
2.PostProcessorRegistrationDelegate#invokeBeanDefinitionRegistryPostProcessors()
18.解析 @PropertySources@PropertySource
符合如下条件就是配置类:1.是否有如下注解:@Component,@ComponentScan,@Import,@ImportResource2.看类中是否有 @Bean注解标注的方法
14.解析基本的注解属性,比如@Lazy@Primary@DependsOn
23.然后在继续解析当前'主'配置类差不多就是执行18到22的步骤
15.创建 BeanDefinitionHolder 对象,并将 BeanDefinition 设置进去
12.进而判断是否标注了@Condition 注解
21.解析@ImportResource
9.读取 basePackages 下的所有 .class 文件,转成 Resource 对象
注册完成之后,他会继续判断,是否为候选配置类?
3.遍历BeanDefinitionRegistryPostProcessor的方法
22.解析@Bean注解标注的方法
7.ComponentScanAnnotationParser 开始执行解析
8.执行ClassPathBeanDefinitionScanner# doScan(basePackages)方法
16.将BeanDefinition 对象保存到 BeanFactory 中注册到此结束。
0 条评论
下一页