Spring-ConfigurationClassPostProcessor类

ConfigurationClassPostProcessor是Spring框架中的一个关键组件,它处理带有@Configuration、@Component、@ComponentScan、@Import、@ImportResource和@Bean注解的类。这个过程涉及到了配置类的解析、组件扫描、导入其他配置、资源文件加载以及bean的定义和管理。@Bean注解的方法会被转化为BeanDefinition对象,用于在IOC容器中创建bean。
摘要由CSDN通过智能技术生成

ConfigurationClassPostProcessor

ConfigurationClassPostProcessor类为一个beanFactory后置处理其, 其中主要用以解析添加了@Configuration, @Component, @ComponentScan, @Import, @ImportResource, @Bean注解对应的类以及方法, 其整体解析流程如下:
在这里插入图片描述

注解解释

@Configuration

应用了@Configuration的类, 为配置类, 其可等同于xml配置, 其对应势力将会被创建CGlib代理类,以确保通过该配置类定义的bean实力在IOC容器中为单例或者与之定义的scope对应

@Component

应用了@Component的类, 可理解为组件类, 其中应用@service, @Controller注解的类,都可理解为组件类, 在解析@Component时, 会解析其类中的子类,是否被有应用配置注解

@ComponentScan

@ComponentScan定义类包名, 会解析对应定义包下中所有符合ClassPathBeanDefinitionScanner中includeFilters定义的所有类,并创建BeanDefinition

@Import

@Import中需要设置对应import类, AOP实现中@EnableAspectJAutoProxy中@Import对应的import类为AspectJAutoProxyRegistrar, 在事物中@EnableTransactionManagement中@Import对应的import类为TransactionManagementConfigurationSelector,解析如下:

  1. 若import类实现了ImportSelector接口, 则执行对应selectImports()方法获取其他import类;
  2. 若inport类实现ImportBeanDefinitionRegistrar接口, 则实例化对应对象, 并添加到configClass的importBeanDefinitionRegistrars属性中,其后通过ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromRegistrars()方法执行对应registerBeanDefinitions()方法;
  3. 其他情况,则作为配置类, 递归进行解析;
@ImportResource

其入参为资源文件地址, 可以为xml, groovy配置文件, 在JavaConfig以及SpringBoot中,可通过该注解加载xml配置文件

@Bean

@Bean注解应用在方法中, 对应方法将会构造BeanMethod并存储在configClass类beanMethods属性中,其后通过ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForBeanMethod()创建对应BeanDefinition对象,

ConfigurationClassPostProcessorSpring中一个非常重要的BeanPostProcessor,它的主要作用是处理@Configuration注解标记的配置。它在容器启动过程中扫描所有的@Configuration注解,并将它们转换为BeanDefinition,然后将这些BeanDefinition注册到容器中。在这个过程中,ConfigurationClassPostProcessor可以进行一些额外的处理,如解析属性、检查循环依赖、处理Import注解等。 具体来说,ConfigurationClassPostProcessor的主要工作包括以下几个方面: 1. 扫描@Configuration注解ConfigurationClassPostProcessor在容器启动时扫描所有@Configuration注解,并将它们转换为BeanDefinition。 2. 解析属性:在转换@Configuration注解为BeanDefinition的过程中,ConfigurationClassPostProcessor解析中的属性,将其转换为PropertySource或者其他型的BeanDefinition。 3. 检查循环依赖:在转换@Configuration注解为BeanDefinition的过程中,ConfigurationClassPostProcessor检查循环依赖问题,避免出现死循环。 4. 处理Import注解:当@Configuration注解中使用了Import注解时,ConfigurationClassPostProcessor将被导入的也转换为BeanDefinition,并注册到容器中。这个过程递归执行,直到所有的依赖被处理完毕。 总的来说,ConfigurationClassPostProcessorSpring中一个非常重要的BeanPostProcessor,它的主要作用是处理@Configuration注解标记的配置。它在容器启动时扫描所有@Configuration注解,并将它们转换为BeanDefinition,并在这个过程中进行一些额外的处理,如解析属性、检查循环依赖、处理Import注解等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值