我对Spring注释配置有疑问。我有一个bean:
@Bean
public ObservationWebSocketClient observationWebSocketClient(){
log.info("creating web socket connection...");
return new ObservationWebSocketClient();
}
我有一个属性文件:
@Autowired
Environment env;
在属性文件中,我想要一个特殊的boolean property
createWebsocket=true/false
这标志着是否应该创建一个bean ObservationWebSocketClient。如果属性值为false,我根本不想建立Web套接字连接。
有没有实现这一目标的技术可能性?
尽管我没有使用过此功能,但似乎可以使用spring 4的@Conditional
注解进行操作。
首先,创建一个Condition
类,在其中ConditionContext
可以访问Environment
:
public class MyCondition implements Condition {
@Override
public boolean matches(ConditionContext context,
AnnotatedTypeMetadata metadata) {
Environment env = context.getEnvironment();
return null != env
&& "true".equals(env.getProperty("createWebSocket"));
}
}
然后注释你的bean:
@Bean
@Conditional(MyCondition.class)
public ObservationWebSocketClient observationWebSocketClient(){
log.info("creating web socket connection...");
return new ObservationWebSocketClient();
}
编辑的spring-boot注释@ConditionalOnProperty
也一般实行这一点; 感兴趣的人可以在github上找到用于Condition
评估它的源代码。如果你发现自己经常需要这种功能,建议你使用类似的实现,而不要进行大量的自定义实现。Condition