ConfigurationClassPostProcessor是如何解析(@Bean,@Import等)装配bean的注解,并完成beanDefition注册的?

ConfigurationClassPostProcessor是如何解析(@Bean,@Import等)装配bean的注解,并完成beanDefition注册的

LD is tigger forever,CG are not brothers forever, throw the pot and shine forever.
Modesty is not false, solid is not naive, treacherous but not deceitful, stay with good people, and stay away from poor people.
talk is cheap, show others the code,Keep progress,make a better result.
Survive during the day and develop at night。

目录

概述

问题

(1) @Configuration注解的作用是什么,Spring是如何解析加了@Configuration注解的类?
(2) Spring在什么时候对@ComponentScan、@ComponentScans注解进行了解析?
3) Spring什么时候解析了@Import注解,如何解析的?
(4) Spring什么时候解析了@Bean注解?

其实上面的四个问题都可以用一个类来解释,
ConfigurationClassPostProcessor。那么这个类究竟是如何来解决这些问题的呢?
ConfigurationClassPostProcessor是一个BeanFactory的后置处理器,因此它的主要功能是参与BeanFactory的建造,在这个类中,会解析加了@Configuration的配置类,还会解析@ComponentScan、@ComponentScans注解扫描的包,以及解析@Import等注解。

ConfigurationClassPostProcessor这个类是Spring内置的一个BeanFactory后置处理器,是在this()方法中将其添加到BeanDefinitionMap中的(可以参考笔者的另一篇文章 https://mp.weixin.qq.com/s/q6zs7xRjpcB4YxLw6w477w )。在执行过程中,会先执行postProcessBeanDefinitionRegistry(),然后执行postProcessBeanFactory()。
postProcessBeanDefinitionRegistry
postProcessBeanDefinitionRegistry()方法中调用了processConfigBeanDefinitions(),所以核心逻辑在processConfigBeanDefinition()方法中。

public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry){
    processConfigBeanDefinitions(registry);
}

processConfigBeanDefinitions()方法代码如下(省略了部分不重要的代码),源码中添加了许多注释,解释了部分重要方法的作用。

ConfigurationClassUtils.checkConfigurationClassCandidate()
该方法是用来判断一个是否是一个配置类,并为BeanDefinition设置属性为lite或者full。如果加了@Configuration,那么对应的BeanDefinition为full,如果加了@Bean,@Component,@ComponentScan,@Import,@ImportResource这些注解,则为lite。lite和full均表示这个BeanDefinition对应的类是一个配置类。

isFullConfigurationCandidate()方法用来判断一个类是否加了@Configuration注解

isLiteConfigurationCandidate()方法用来判断类是否加了@Bean,@Component,@ComponentScan,@Import,@ImportResource注解

2.2 parser.pase()

实现思路分析

相关工具如下:

分析:

小结:

主要讲述了注解配置方式的Spring 是如何解析@Configuration、@Bean以及@Component, 里面有许多不足,请大家指正~

参考资料和推荐阅读

1.链接: 参考资料.
2.链接: 参考资料.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执于代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值