从官方文档中的代码开始,我创建了以下结构:
interface Service {
String name();
}
@LookupIfProperty(name = "service.foo.enabled", stringValue = "true")
@ApplicationScoped
class ServiceFoo implements Service {
public String name() {
return "foo";
}
}
@ApplicationScoped
class ServiceBar implements Service {
@Startup
public void onStart() { // startup logic }
public String name() {
return "bar";
}
}
即使未注入 bean,ServiceBar.onStart() 中的代码也始终会执行。有没有办法只在ServiceFoo禁用时才执行ServiceBar启动逻辑?
正如@ladicek 已经描述的那样,
LookupIfProperty
不影响启用。作为解决方法,我通过以下方式更改了代码:
interface Service {
String name();
}
@LookupIfProperty(name = "service.foo.enabled", stringValue = "true")
@ApplicationScoped
class ServiceFoo implements Service {
public String name() {
return "foo";
}
}
@ApplicationScoped
class ServiceBar implements Service {
@ConfigProperty(name = "service.foo.enabled", defaultValue = "false")
Boolean isFooEnabled;
@Startup
public void onStart() {
if (!isFooEnabled) {
// startup logic
}
}
public String name() {
return "bar";
}
}
这样只有在ServiceFoo没有开启的情况下才会执行启动逻辑。不是超级优雅,但很有效。