@ConditionalOnProperty 默认 bean 无法正常工作

ip6*_*696 3 java spring spring-boot

我有 2 颗豆子:

@Component("CryptoClient")
@ConditionalOnProperty(name = "enabled-client", havingValue = "AfsClient")
public class AfsClient implements CryptoClient {
Run Code Online (Sandbox Code Playgroud)

@Component("CryptoClient")
@ConditionalOnProperty(name = "enabled-client", havingValue = "JinnClient")
public class JinnClient implements CryptoClient {
Run Code Online (Sandbox Code Playgroud)

我更改属性值:

enabled-client: AfsClient或者enabled-client: JinnClient并使用这个bean。但现在我添加默认 bean(如果enabled-client属性不存在):

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

如果enabled-client属性不存在 - 它工作正常。但即使存在财产,它也能发挥作用。无论如何调用默认 bean。

Jee*_*dra 6

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

默认情况下,matchIfMissing为 false,即如果不配置该属性,则自动配置不会生效,不会创建 bean。如果matchIfMissing 为 true,则意味着如果没有相应的属性配置,则自动配置默认生效并创建bean(本例中为 defaultClient ),并且如果存在相应的属性配置 - 显然它会创建 bean。:)

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