springboot_Condition

Posted songfahzun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot_Condition相关的知识,希望对你有一定的参考价值。

Condition可以根据不同的条件装配不同的bean
例如:根据不同的字符集加载不同的bean
举个栗子
我有一个接口,两个实现类
public interface EncodingConvert {
}
public class UTF8EncodingConvert implements EncodingConvert {
}
public class GBKEncodingConvert  implements EncodingConvert{
}

以及两个Condition

public class UTF8Condition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        String encoding = System.getProperty("file.encoding");
        if (encoding != null) {
            return "utf-8".equals(encoding.toLowerCase());
        }
        return false;
    }
}
public class GBKCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        String encoding = System.getProperty("file.encoding");
        if (encoding != null) {
            return "gbk".equals(encoding.toLowerCase());
        }
        return false;
    }
}

以及一个配置类使用@Conditional,以UTF8Condition.class作为参数,这个UTF8Condition的matches方法

返回值true和false,直接决定了是否初始化这个bean

 

@SpringBootConfiguration
public class EncodingConvertConfig {


    @Bean
    @Conditional(UTF8Condition.class)
    public EncodingConvert getUTF8EncodingConvert() {
        UTF8EncodingConvert utf8EncodingConvert = new UTF8EncodingConvert();
        return utf8EncodingConvert;
    }

    @Bean
    @Conditional(GBKCondition.class)
    public EncodingConvert getGBKEncodingConvert() {
        GBKEncodingConvert gbkEncodingConvert = new GBKEncodingConvert();
        return gbkEncodingConvert;
    }
}

 

 

然后获取数据

@SpringBootApplication
public class Springboot4Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(Springboot4Application.class, args);
        Map<String, EncodingConvert> beansOfType = context.getBeansOfType(EncodingConvert.class);
        System.out.println("beansOfType = " + beansOfType);
    }
}

根据结果看到加载的是utf8

 

我们修改下启动参数

-Dfile.encoding=GBK

在运行

到这里就看出效果了

 




以上是关于springboot_Condition的主要内容,如果未能解决你的问题,请参考以下文章