SpringBoot Bean 定义全过程(本质还是spring的bean定义过程)
2021-11-16 18:55:42 13 举报
springboot bean 定义过程
作者其他创作
大纲/内容
如果想知道 Bean 的定义全过程,可以反向推理,从 DefaultListableBeanFactory 类中的 #registerBeanDefinition()方法进行分析基于:Spring 5.2.4.RELEASE 测试
15
解析配置上的 @ImportResource 注解
12.判断是否为符合候选条件的组件,即:是否标注 @Component 注解或者基于它的meta注解,@Service,@Controller,span style=\"font-size: inherit;\
截止到这里,IOC容器中的bean 定义map中,只有一个使我们自定义的类,那就是主配置类
ConfigurationClassParser
ConfigurationClassPostProcessor
Springboot启动
@SpringBootApplication
3.调用 invokeBeanFactoryPostProcessors()
9.4
15.执行完14步骤之后,继续解析9.1中放入Map中的类,将他们也放入bean 定义中
@Component
9.5
7.调用 parse(Set candidates) 方法
拥有
调用配置类处理器的 postProcessBeanDefinitionRegistr(BeanDefinitionRegistry registry)
解析配置类上的 @Import注解
14.注册到 BeanDefinitionRegistry 中
4.遍历处理器
8.解析主配置类
放入到 中BeanDefinitionRegistry
9.3
13
放到Map中的类,会在15步进行解析
bean定义过程结束
解析 @ComponentScan 注解,在9.1中,如果内部类上也有这个注解,实际上也会去解析的,这里用到了递归
截止到这里,ioc 定义容器中,有主配置类,和基于 @Component注解的类(除了spring自定义的)
9.2
5.调用处理器的 postProcessBeanDefinitionRegistry方法
9.6:开始解析 @ComponentScan 注解的内容
10.读取 basePackages 下的所有 .class 文件,转成 Resource 对象
6.来到配置类处理器
看配置类上是否标有 @PropertySource 注解,如果有,则解析
2.refresh()
9.1
如果满足12的条件,则创建一个 ScannedGenericBeanDefinition 对象,并保存到 BeanDefinitionRegistry 中
BeanDefinitionRegistry
@Configuration
BeanDefinitionRegistryPostProcessor
11.遍历所有的 Resource 可以理解为是每一个类
AbstractApplicationContext
ComponentScanAnnotationParser
0 条评论
回复 删除
下一页