Spring 自动转配类 在类中使用@Bean 注解进行转配但是需要排除该类说明

Posted Archibald Witwicky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring 自动转配类 在类中使用@Bean 注解进行转配但是需要排除该类说明相关的知识,希望对你有一定的参考价值。

在spring中可以使用 @Component @Configuration @Bean(实例化后返回该bean)进行类实例的自动装配。

需求:

排除指定需要自动转配的类。

 

说明:

1、在以上注解中 @Component @Configuration 可以通过 SpringApplication(exclude/excludeName) / @ComponentScan(excludeFilters={@Filter(type=FilterType.ANNOTATION,value=EnableWebMvc.class)}) 方法进行排除制定类。

2、其中可以使用类的全路径限定名,如:xxx.xxx.xxx.RedisConfig。或者class类型,如RedisConfig.class 进行排除。

3、但如果是在类中使用@Bean声明的类实例,等不到类限定名称,也得不到该类的 class 。因此无法使用以上两种排除方式。

 

解决:

在使用@Bean注解自动装配类实例时,使用@Conditional进行判断,如果符合某种条件,则装配该实例。

如:

@Primary
@Bean(name="dataSource")
@Conditional(CommonDbCondition.class)
public DataSource dataSource() {
	DataSource datasource = null;
	try {
		DataSource datasource = new DataSource();
		// 省略
		return datasource;

	} catch (Exception e) {
		logger.error("db configuration initialization filter", e);
	}
	return datasource;
}

CommonDbCondition类如下:

public class CommonDbCondition implements Condition{
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        String dbtype = context.getEnvironment().getProperty("jdbc.datasource.type");
	return PubString.isNullOrSpace(dbtype)
    }
}

  

因此可以自由控制该实例是否装配。

 

以上。

 

以上是关于Spring 自动转配类 在类中使用@Bean 注解进行转配但是需要排除该类说明的主要内容,如果未能解决你的问题,请参考以下文章

[Spring6.0源码解析]简述@Configuration注解

Spring中注入bean学习的总结

SpringSpringMVCSpringBootSpringCloud 框架常用注解说明

详解Spring

Spring学习总结-自动装配

在类路径资源中定义名称为“entityManagerFactory”的 bean 创建错误:调用 init 方法失败