假设我们有ServiceA
,它应该在某些配置文件中工作,但被禁用(即调用该服务不应做任何事情)。我认为有两种方法可以实现它:
- 具有
isEnabled
性质
那么实现可能是
public class ServiceA {
@Value("${isEnabled:true}")
private final boolean isEnabled;
public do() {
if (!isEnabled) return;
...
}
}
这里的缺点是它有点打破了单一责任原则,而且如果我们有很多方法,它们都应该有if(!isEnabled)
- 利用条件注解
这里我们需要ServiceA
和2实现的接口:NoOpServiceA
(空实现)和RealServiceA
都有@ConditionalOnProperty(name = "isEnabled", ...)
。这样就不会有if
的内部方法,出错的机会也会减少,另一方面,它会创建很多额外的类,并可能妨碍代码的可理解性。
你会选择什么,或者有更好的方法吗?
1条答案
按热度按时间cs7cruho1#
我不确定这是否能帮助你实现你想要的,但我做了这样的事情来启用/禁用我的
RestController
。加上这个注解,除非我有
在我的
application.properties
文件中,控制器根本无法启动。P.S:你可能想考虑
@ConditionalOnProperty
,因为它被认为是稍微快一点。希望它能以某种方式帮助你。