Spring源码中BeanFactoryPostProcessor的详细解析,你能告诉我吗?

2026-04-02 01:521阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计444个文字,预计阅读时间需要2分钟。

Spring源码中BeanFactoryPostProcessor的详细解析,你能告诉我吗?

前端将注册许多用于解析注解的bean定义,例如SpringEvent时间、@Autowired处理器等,其中就包含+ConfigurationClassPostProcessor。这个解析的就是@Component、@import等。调用下面rea“




前面说过这里会注册很多用于解析注解的bean定义,比如springEvent时间,比如@autowired处理器等,其中就包含

ConfigurationClassPostProcessor,这个解析的就是@Component,@import等。

当调用下面reader.register(componentClasses)的时候就会把我们的 配置类 注册到

BeanDefinitionMap里面。

(现在配置类有了,bean定义也有了,这时候是不是要开始解析)

那么解析就是在上面第三张图invokeBeanFactoryPostProcessors(beanFactory)

这里面就有我们前面说的两个

beanFactoryPostProcessors 修改bean定义

beanFactoryPostProcessorsRegistry注册bean定义


beanDifinitionRegistryPostProcessor

先调用实现PriorityOrdered接口的,后面调用实现Ordered接口的,最后调用未实现接口的。

Spring源码中BeanFactoryPostProcessor的详细解析,你能告诉我吗?

前面已经注册了的会通过判断是否存在排除,并且注册的会全部放入registryProcessors

前面调用的都是实现beanDifinitionRegistryPostProcessor

最后调用的是实现beanDifinitionRegistryProcessor

也就是那句invokeBeanFactoryPostProcessors




这里对我们的配置类(@configuration)做了cglib动态代理,为什么要对配置类做cglib代理,这样的好处就是,保证在配置类里调用,也是从容器中获取bean。

(注意,必须写了@configuration才会有cglib代理,实现面向对象编程,从容器获取)

那么为什么@Configuration标识的就会代理呢?

因为在bean工厂 注册的时候,会对@configuration注解的配置类,加上full标识,如图。

本文共计444个文字,预计阅读时间需要2分钟。

Spring源码中BeanFactoryPostProcessor的详细解析,你能告诉我吗?

前端将注册许多用于解析注解的bean定义,例如SpringEvent时间、@Autowired处理器等,其中就包含+ConfigurationClassPostProcessor。这个解析的就是@Component、@import等。调用下面rea“




前面说过这里会注册很多用于解析注解的bean定义,比如springEvent时间,比如@autowired处理器等,其中就包含

ConfigurationClassPostProcessor,这个解析的就是@Component,@import等。

当调用下面reader.register(componentClasses)的时候就会把我们的 配置类 注册到

BeanDefinitionMap里面。

(现在配置类有了,bean定义也有了,这时候是不是要开始解析)

那么解析就是在上面第三张图invokeBeanFactoryPostProcessors(beanFactory)

这里面就有我们前面说的两个

beanFactoryPostProcessors 修改bean定义

beanFactoryPostProcessorsRegistry注册bean定义


beanDifinitionRegistryPostProcessor

先调用实现PriorityOrdered接口的,后面调用实现Ordered接口的,最后调用未实现接口的。

Spring源码中BeanFactoryPostProcessor的详细解析,你能告诉我吗?

前面已经注册了的会通过判断是否存在排除,并且注册的会全部放入registryProcessors

前面调用的都是实现beanDifinitionRegistryPostProcessor

最后调用的是实现beanDifinitionRegistryProcessor

也就是那句invokeBeanFactoryPostProcessors




这里对我们的配置类(@configuration)做了cglib动态代理,为什么要对配置类做cglib代理,这样的好处就是,保证在配置类里调用,也是从容器中获取bean。

(注意,必须写了@configuration才会有cglib代理,实现面向对象编程,从容器获取)

那么为什么@Configuration标识的就会代理呢?

因为在bean工厂 注册的时候,会对@configuration注解的配置类,加上full标识,如图。