在一个Spring-Boot项目中,我使用@ConditionalOnProperty
来 Select 是否加载一些Bean.它看起来如下所示:
@ConditionalOnProperty(
prefix = "myservice",
name = "implversion",
havingValue = "a"
)
@Service
public class MyServiceImplA implements MyService {
// ...
}
这允许我使用特定的配置文件来 Select 应该加载哪个Bean,例如接口的不同实现,具体取决于值myservice.implversion
是a
还是b
或任何其他值.
我想用一个用户更友好的注释来达到同样的效果,比如:
@OnMyServiceVersion(value = "a")
@Service
public class MyServiceImplA implements MyService {
// ...
}
怎么可能做到这一点呢?
我试着用@Conditional
注释我的定制批注并实现Condition
接口,但我不知道如何以这种方式判断属性.Spring-Boot OnPropertyCondition extends SpringBootCondition
不是public
,所以我不能从那里开始,而且不允许扩展注释,所以我有点卡住了.
我还try 了以下几种方法,但都没有成功:
// INVALID CODE, DO NOT USE
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@ConditionalOnProperty(
prefix = "myservice",
name = "implversion",
havingValue = OnMyServiceVersion.value()
)
public @interface OnMyServiceVersion {
String value();
}