概述
在Spring中,配置类(使用@Configuration的那些类)可以使用@Import直接导入另外一个配置类,也可以导入一个ImportSelector实现类根据特定的选择条件导入符合条件的配置类,也可以实现该接口ImportBeanDefinitionRegistrar根据特定条件程序化地直接注册bean定义到容器。
一个ImportBeanDefinitionRegistrar实现类通常也可能会实现各种Aware接口,如果实现了这些Aware接口,这些接口方法的调用会发生在registerBeanDefinitions之前。
ImportBeanDefinitionRegistrar#registerBeanDefinitions的调用在ConfigurationClassBeanDefinitionReader#loadBeanDefinitionsFromRegistrars中。
ImportBeanDefinitionRegistrar实现类举例 :
-
DataSourceInitializationConfiguration$Registrar向容器注册一个名称为
dataSourceInitializerPostProcessor的基础设施GenericBeanDefinition。 -
DataSourceInitializedPublisher$Registrar向容器注册一个名称为
dataSourceInitializedPublisher的基础设施GenericBeanDefinition。 -
FeignClientsRegistrar向容器注册所有
feign客户端的缺省配置bean定义,每个feign客户端的配置bean定义,以及每个feign客户端bean定义。
一个ImportBeanDefinitionRegistrar通常被@Import注解使用,如下所示:
//...
@Import(FeignClientsRegistrar.class)
public @interface EnableFeignClients {
//...
}
源代码解析
package org.springframework.context.annotation;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.core.type.AnnotationMetadata;
public interface ImportBeanDefinitionRegistrar {
/**
* Register bean definitions as necessary based on the given annotation metadata of
* the importing @Configuration class.
* Note that BeanDefinitionRegistryPostProcessor types may not be
* registered here, due to lifecycle constraints related to @Configuration
* class processing.
* 基于导入该ImportBeanDefinitionRegistrar的配置类的注解元数据按需求注册bean定义到
* 容器。
* 注意这里不能注册BeanDefinitionRegistryPostProcessor类型的bean定义,原因是
* 这跟配置类的生命周期机制有冲突。
*
* @param importingClassMetadata annotation metadata of the importing class
* @param registry current bean definition registry
*/
public void registerBeanDefinitions(
AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry);
}
相关文章
基于Java配置的Spring应用中如何导入更多的bean定义配置
Spring 概念模型接口 ImportSelector : 配置类导入选择器
本文深入探讨了Spring框架中ImportBeanDefinitionRegistrar接口的应用,通过具体实现类如FeignClientsRegistrar,展示了如何根据特定条件向Spring容器注册bean定义。此外,还介绍了如何通过@Import注解引入这些实现类,以增强应用程序的配置灵活性。
429

被折叠的 条评论
为什么被折叠?



