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。
我们先来了解一下matchIfMissing属性:用于指定配置文件中没有配置相应属性时的默认处理。
默认情况下,matchIfMissing为 false,即如果不配置该属性,则自动配置不会生效,不会创建 bean。如果matchIfMissing 为 true,则意味着如果没有相应的属性配置,则自动配置默认生效并创建bean(本例中为 defaultClient ),并且如果存在相应的属性配置 - 显然它会创建 bean。:)
因此,如果matchIfMissing设置为true - 在任何情况下都会创建bean defaultClient 。
| 归档时间: |
|
| 查看次数: |
5133 次 |
| 最近记录: |