还是没有符合的,再查看修饰这些注解的注解~ 如此递归查,在@SpringBootConfiguration中到@Configuration,成功类似的还有@Service,@Controller.它们都被@Component修饰,因此查包含@Component注解的类时它们也是符合的.
@Component的⽣效逻辑
下⾯将按照SpringBoot的启动流程讲解@Component,参见下图
SpringBoot-bean.png
1. createApplicationContext阶段: 注册
ConfigurationClassPostProcessor
SpringBoot默认创建AnnotationConfigApplicationContext,它在构造时会创建AnnotatedBeanDefinitionReader,后者构造时会调
⽤isterAnnotationConfigProcessors()注册ConfigurationClassPostProcessor的BeanDefinition. ConfigurationClassPostProcessor会处理带@Configuartion修饰的bean,下⾯会⽤到
SpringBoot-bean-0.png
springboot是啥2. prepareContext阶段: 注册启动类SpringLifeCycleApplication的BeanDefinition
在Spring启动的早期阶段,就会将SpringLifeCycleApplication注册为bean,后续的很多逻辑都会根据它⾝上的@SpringBootApplication(以及其他注解)去做
SpringBoot-bean-1.png
3. refreshContext阶段的invokeBeanFactoryPostProcessor(): 调⽤ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistr
SpringBoot-bean-2.png
插⼀段,先来理⼀下invokeBeanFactoryPostProcessor()的具体逻辑,分为两块: postProcessBeanDefinitionRegistry()和postProcessBeanFactory()
postProcessBeanDefinitionRegistry()允许添加⾃定义的BeanDefinition(对于通过xml注册的BeanDefinition或代码注册的称之为正常,其他的如通过注解@Component添加的都称为⾃定义),经过这⼀步,Spring不再允许添加BeanDefinition,由于新注册的BeanDefinition可能代表⼀个BeanFactoryPostProcessor,因此这个过程是迭代进⾏的,具体逻辑是:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。