@ConditionalOnProperty、@ConditionalOnBean 条件注解的使用

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。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一支帆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值