ConfigurationClassPostProcessor的加载过程

ConfigurationClassPostProcessor的加载,在带Xml配置文件的ClassPathApplicationContext中加载和用SpringBoot的SpringApplication来加载,是不同的。分述如下:

  • 在带Xml配置文件的ClassPathApplicationContext中加载时,
    • 调用AbstractApplicationContext中调用refresh()方法,在refresh()方法中再调用obtainFreshBeanFactory方法,在obtainFreshBeanFactory()方法中又调用loadBeanDefinitions方法,然后会有一系列的loadBeanDefinitions方法,直到调用XmlBeanDefinitionReader中的loadBeanDefintions方法,此时会进而调用doLoadBeanDefinitions方法,然后会调用到DefaultBeanDefintionDocumentReader的registerBeanDefintions方法,再doRegisterBeanDefinitions方法,此时要干正事了。
    • 在doRegisterBeanDefinitions方法中,会先后调用三个方法:preProcessXml、parseBeanDefinitions、postProcessXml。在parseBeanDefinitions方法中,以会调用一系列的parse方法,直到调用ComponentScanBeanDefinitionParser的parse方法,这里会new一个ClassPathBeanDefinitonScanner来,调用这个scanner的doScan方法。
    • 在doScan方法中,会先调用findCandidateComponents方法,再调用registerComponents方法。在registerComponents方法中调用AnnotationConfigUtils的静态方法registerAnnotionConfigProcessors。在这个方法里会注册内部的、所有用于注解的BFPP和BPP,其中就有ConfigurationClassPostProcessor。
  • 用SpringBoot的SpringApplication来加载时,
    • 有SpringApplication的run方法启动,会做一系列的事,会先启动任务监测器StopWatch,再从spring.factories在内存中的缓存map里读取SpringApplicationRunListener再启动11个注册的Listener,再准备环境Environment,再根据WebApplicationType类型SERVLET创建ApplicationContext的实例AnnotationConfigServletWebServerApplicationContext,在这个ApplicationContext的构造方法中会给两个属性赋值:reader和scannner,其中的reader为AnnotatedBeanDefinitionReader,在reader的构造方法中调用了AnnotionConfigUtils的registerAnnotationConfigProcessors方法,后面的过程同上。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: ConfigurationClassPostProcessor 是 Spring Framework 中的一个后置处理器,它负责处理被 @Configuration 注解标注的 Java 类,将其中的 Bean 定义解析成 BeanDefinition 并注册到 BeanFactory 中,从而使得这些 BeanDefinition 可以被容器实例化并管理。 在 Spring 容器启动时,ConfigurationClassPostProcessor 会扫描所有被 @Configuration 注解标注的类,并将其中的 Bean 定义解析成 BeanDefinition。这个过程中,它会处理 @Import、@ImportResource、@ComponentScan 等注解,并将相应的 BeanDefinition 注册到 BeanFactory 中。这些 BeanDefinition 最终会被容器实例化成相应的 Bean,并交由容器进行管理。 总之,ConfigurationClassPostProcessor 是 Spring Framework 中非常重要的一个后置处理器,它负责将被 @Configuration 注解标注的类解析成 BeanDefinition 并注册到容器中,是 Spring 容器启动过程中非常关键的一步。 ### 回答2: ConfigurationClassPostProcessor 是 Spring 框架中的一个关键组件,用于处理注解配置类并将其转换为 BeanDefinition 对象,从而实现将配置类中声明的 Bean 注册到 Spring 容器中的功能。 在 Spring 框架中,我们经常使用注解来声明配置类,比如 @Configuration、@Bean 等。而 ConfigurationClassPostProcessor 就是负责处理这些注解,并将其解析为具体的 BeanDefinition 对象。 具体而言,ConfigurationClassPostProcessor 主要完成以下几个任务: 1. 扫描配置类,找到其中所有的 Bean 声明,并解析为 BeanDefinition 对象。 2. 处理相应的注解,例如 @Import、@ComponentScan 等,根据注解的参数信息进行相应的处理。 3. 处理配置类之间的依赖关系,确保各个配置类之间的 Bean 能够正确地注入和使用。 4. 处理各个 BeanDefinition,对其中的属性、方法等进行相应的修整与调整。 ConfigurationClassPostProcessor 在 Spring 容器的启动过程中扮演着非常重要的角色,它能够帮助我们自动扫描配置类并将其中声明的 Bean 注册到容器中,大大简化了我们的配置工作。同时,它还能够解决配置类之间的依赖关系,并保证 Bean 的正确注入和使用。 总之,ConfigurationClassPostProcessor 是 Spring 框架中一个非常重要的组件,负责处理注解配置类,并将其转换为能够被 Spring 容器处理的 BeanDefinition 对象。它为我们提供了更便捷和灵活的配置方式,使得我们能够更高效地开发和管理 Spring 应用程序。 ### 回答3: ConfigurationClassPostProcessor是Spring框架中的一个后置处理器,用于处理@Configuration注解修饰的配置类。在Spring容器启动过程中,它负责解析、扫描和处理@Configuration注解,并将其转换为容器可识别的Bean定义。 首先,ConfigurationClassPostProcessor会扫描所有的@Configuration注解修饰的类,并解析其中的@Bean注解,将其转换为BeanDefinition对象。这样,就能够将配置类中的@Bean方法作为普通的Bean定义注册到Spring容器中。 其次,ConfigurationClassPostProcessor会处理配置类中的@Import注解,用于导入其他配置类。它会递归地解析被导入的配置类,并将其转换为BeanDefinition对象,最终注册到容器中。 此外,ConfigurationClassPostProcessor还会处理配置类中的@PropertySource注解和@Value注解,用于外部配置文件和解析配置值。它会根据注解中指定的配置文件路径,读取对应的属性值,并将其转化为BeanDefinition对象,将配置值注入到对应的Bean中。 总而言之,ConfigurationClassPostProcessor是Spring框架中非常重要的一个后置处理器,负责解析和处理@Configuration注解修饰的配置类。它能够将配置类中的@Bean方法转换为BeanDefinition对象,并注册到容器中,使得配置类中定义的Bean可以被容器管理和使用。此外,它还能处理导入其他配置类、外部配置文件和解析配置值的功能,为Spring应用的配置提供了便利。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值