zoukankan      html  css  js  c++  java
  • 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)
        }
    }
    

      

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

    以上。

  • 相关阅读:
    Nodejs中的流
    Openstack Havana的两个排错过程
    Mongoose入门
    Promise
    CSS3中的动画
    MySql学习笔记(一)--安装配置
    应用Dubbo框架打造仿猫眼项目(二) 影片模块开发
    应用Dubbo框架打造仿猫眼项目(一) 用户模块开发
    4种事务的隔离级别
    JAVA面试题解惑系列(一)——类的初始化顺序
  • 原文地址:https://www.cnblogs.com/hfultrastrong/p/9842598.html
Copyright © 2011-2022 走看看