@ConditionalOnProperty、@ConditionalOnBean 条件注解的使用
Spring 中提供了多种条件注解以实现在满足特定条件的时候才向 Sping 容器中注入指定的 bean;Springboot 中自动配置的原理也是基于各种条件注解,当我们引入某个依赖导致满足了注入某些特定bean的条件,这些 bean 就会被自动注入 Spring 容器中供我们使用。@ConditionalOnBean当指定的 Bean 存在时,则实例化当前 Bean。@ConditionalO
·
Spring 中提供了多种条件注解以实现在满足特定条件的时候才向 Sping 容器中注入指定的 bean;Springboot 中自动配置的原理也是基于各种条件注解,当我们引入某个依赖导致满足了注入某些特定bean的条件,这些 bean 就会被自动注入 Spring 容器中供我们使用。
@ConditionalOnBean
当指定的 Bean 存在时,则实例化当前 Bean。@ConditionalOnMissingBean
与@ConditionalOnBean
相反,当指定的 Bean 不存在时,则实例化当前 Bean。@ConditionalOnClass
当指定的类名在类路径上存在时,则实例化当前 Bean。@ConditionalOnMissingClass
当指定的类名在类路径上不存在时,则实例化当前 Bean。
下面通过一个配置类,来完成在不同情况下使用阿里云 Oss 和 minioOss 对象存储服务的配置:
@Configuration
public class OssConfiguration {
@Bean
@ConfigurationProperties(prefix = "oss.aliyun")
@ConditionalOnProperty(value = "oss.aliyun.endPoint")
public AliyunOssProperties aliyunOssProperties() {
return new AliyunOssProperties();
}
@Bean
@ConfigurationProperties(prefix = "oss.minio")
@ConditionalOnProperty(value = "oss.minio.endPoint")
public MinioOssProperties minioOssProperties() {
return new MinioOssProperties();
}
@Bean
@ConditionalOnBean(value = AliyunOssProperties.class)
public OssService aliyunOssConfig(AliyunOssProperties properties) {
return new AliyunOssServiceImpl(properties);
}
@Bean
@ConditionalOnBean(value = MinioOssProperties.class)
public OssService minioOssService(MinioOssProperties properties) {
return new MinioServiceImpl(properties);
}
}
@ConditionalOnProperty(value = "oss.aliyun.endPoint")
表示,当在配置文件 .properties 或 .yml 中配置属性 oss.aliyun.endPoint
时,Spring 就会加载 AliyunOssProperties。
进而 @ConditionalOnBean(value = AliyunOssProperties.class)
将会注入 OssService 的实现 AliyunOssServiceImpl。
相同的,如果配置文件中配置 oss.minio.endPoint
,将会注入 OssService 的实现 MinioServiceImpl。
更多推荐
已为社区贡献1条内容
所有评论(0)