文章记录起因:有个项目中开始时用了对象存储,开始是公司一个同事写的,后来过了一段时间后,甲方要求对象存储换为了华为云存储,问题一是不确定原来的还用不用,问题二是改动的地方有点多,如果一个一个地方的去改,需要换回去的时候又要从头到尾再去改一遍。所以需要实现扩展了华为云存储的服务,同时要简单的能换回原来的服务。
实现逻辑:
- 创建一个对象存储的基本接口( IStorageService )
- 让原来的服务与现在需要服务都实现这个基本接口( IStorageService )
- 各自实现对象存储的逻辑
- 两个服务类上使用 @ConditionalOnProperty 注解标明区别
- 配置文件配置需要生效的服务
一、@ConditionalOnProperty
@ConditionalOnProperty
是 Spring 框架中的一个条件注解,它允许你根据应用程序的配置属性来控制是否应该创建一个 bean 或配置一个类。
以下是 @ConditionalOnProperty
注解的主要属性及其详细说明:
-
name
:要检查的属性的名称。这是一个必需的属性。 -
havingValue
:要求属性必须具有的值。如果未指定,那么属性只要存在就足够。 -
prefix
:属性名称的前缀。如果指定了prefix
,name
属性值将会被拼接到prefix
后面。 -
value
:name
属性的别名。通常与name
一起使用,用于提供一个额外的属性名称。 -
matchIfMissing
:当属性不存在时,默认值为false
。如果设置为true
,则即使属性不存在,也会视为匹配成功。
这些属性允许你根据应用程序的配置属性来灵活地控制 bean 或配置类的创建和激活。你可以使用这些属性来根据不同的配置设置,动态地配置和管理应用程序的行为
@ConditionalOnProperty
使用:
@Service
@ConditionalOnProperty