gpt4 book ai didi

java - 有条件的spring bean创建

转载 作者:IT老高 更新时间:2023-10-28 13:43:44 24 4
gpt4 key购买 nike

我有一个关于 Spring 注解配置的问题。我有一颗 bean :

@Bean 
public ObservationWebSocketClient observationWebSocketClient(){
log.info("creating web socket connection...");
return new ObservationWebSocketClient();
}

我有一个属性文件:

@Autowired
Environment env;

在属性文件中我想要一个特殊的 boolean 属性

createWebsocket=true/false

标志是否应该创建一个 bean ObservationWebSocketClient。如果属性值为 false,我根本不想建立 Web 套接字连接。

是否有任何技术上的可能性来实现这一点?

最佳答案

虽然我没有使用过此功能,但您似乎可以使用 spring 4 的 @Conditional annotation 来做到这一点.

首先,创建一个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();
}

edit spring-boot 注解 @ConditionalOnProperty 已经通用实现了这个;用于评估它的 Condition 的源代码is available on github here对于那些感兴趣的人。如果您发现自己经常需要这种功能,建议您使用类似的实现,而不是制作大量自定义 Condition 实现。

关于java - 有条件的spring bean创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29844271/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com