我有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: 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);
}
如果enabled-client
属性不存在-它可以正常工作。但是,即使存在财产,它也可以工作。仍然称为默认bean。
答案 0 :(得分:1)
先了解一下matchIfMissing属性:用于指定配置文件中没有配置相应属性时的默认处理。
默认情况下,matchIfMissing为false,也就是说,如果没有配置该属性,自动配置不会生效,也不会创建bean。 如果matchIfMissing为true,表示如果没有对应的属性配置,则自动配置默认生效并创建bean(本例为defaultClient),如果对应属性配置存在 - 显然它会创建 bean。 :)
因此,如果 matchIfMissing 设置为 true - 在任何情况下都会创建 bean defaultClient。
答案 1 :(得分:0)
似乎您的默认客户端也是AfsClient。因此,使用以下命令完成第一个bean定义:
@Component("CryptoClient")
@ConditionalOnProperty(name = "enabled-client", havingValue = "AfsClient", matchIfMissing = true)
public class AfsClient implements CryptoClient {
如果给定属性匹配或缺少该bean,则会创建此bean。