@ConditionalOnProperty默认bean工作不正确

时间:2018-10-03 09:34:47

标签: java spring spring-boot

我有2个豆子:

@Component("CryptoClient")
@ConditionalOnProperty(name = "enabled-client", havingValue = "AfsClient")
public class AfsClient implements CryptoClient {

@Component("CryptoClient")
@ConditionalOnProperty(name = "enabled-client", havingValue = "JinnClient")
public class JinnClient implements CryptoClient {

我更改属性值:

enabled-client: AfsClientenabled-client: JinnClient并使用此bean。但是现在我添加了默认bean(如果enabled-client属性不存在):

    @Bean("CryptoClient")
    @ConditionalOnProperty(name = "enabled-client", matchIfMissing = true)
    public CryptoClient defaultClient(EDSService edsService) {
        return new AfsClient(edsService);
    }

如果enabled-client属性不存在-它可以正常工作。但是,即使存在财产,它也可以工作。仍然称为默认bean。

2 个答案:

答案 0 :(得分:1)

先了解一下ma​​tchIfMissing属性:用于指定配置文件中没有配置相应属性时的默认处理。

默认情况下,ma​​tchIfMissing为false,也就是说,如果没有配置该属性,自动配置不会生效,也不会创建bean。 如果ma​​tchIfMissing为true,表示如果没有对应的属性配置,则自动配置默认生效并创建bean(本例为defaultClient),如果对应属性配置存在 - 显然它会创建 bean。 :)

因此,如果 ma​​tchIfMissing 设置为 true - 在任何情况下都会创建 bean defaultClient

答案 1 :(得分:0)

似乎您的默认客户端也是AfsClient。因此,使用以下命令完成第一个bean定义:

@Component("CryptoClient")
@ConditionalOnProperty(name = "enabled-client", havingValue = "AfsClient", matchIfMissing = true)
public class AfsClient implements CryptoClient {

如果给定属性匹配或缺少该bean,则会创建此bean。