Spring注解配置分析(二)——ConfigurationClassPostProcessor处理配置类流程

  ConfigurationClassPostProcessors 是处理配置类的处理器,前面已经知道它是在初始化 AnnotationConfigApplicationContext 时添加到 BeanFactory 中,并且作为一个 BeanDenifitionRegistryPostProcessor 在 AbstractApplicationContext 的 refresh 方法中被调用。接下来继续分析 ConfigurationClassPostProcessor 如何处理配置类,目前理解的主要流程如下。

  1. 在 bean factory 中查找已经添加的配置类 (在以 Servlet 项目为例子时,只有启动类需要解析)
  2. 对上一步的configClass进行排序。
  3. 利用 ConfigurationClassParser 解析配置类(解析该配置类上的其他注解)。
    1. 调用 doProcessConfigurationClass 方法解析配置类
    2. 如果成员类也是配置类,则先解析成员类
    3. 处理配置类上的显示或隐式的 @PropertySources 和 @PropertySource 注解
    4. 处理配置类上显示或隐式的 @ComponentScans 和 @ComponentScan 注解,解析与其相关的配置类
    5. 处理 @Import 注解,查找配置类上显示和隐式的 @Import 注解,保存注解的 value 值
    6. 处理 @ImportResource 注解
    7. 为配置类添加带 @Bean 注解的方法
    8. 查找接口中带 @Bean 注解的方法
    9. 如果父类也是配置类,则解析父类
    10. 处理 DeferredImportSelector
  4. 将上一步解析出来的新配置类通过 loadBeanDefinitions 添加到 bean factory 中。
  5. 如果 bean factory 中有还没有解析的配置类,重复第3步。

   有 @Configuration、@Import 、 @Component、@ComponentScan 以及 @ImportResource 这几个注解的类都是配置类,都会对其进行上面的处理。除了 @Configuration 注解只标识为配置类之外,另外几个注解都有各自的作用,在配置类处理过程中会根据这些注解的参数进行处理。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值