有条件的泉豆创建

2022-09-01 00:22:16

我有一个关于Spring注释配置的问题。我有一个豆子:

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

我有一个属性文件:

@Autowired
Environment env;

在属性文件中,我希望有一个特殊的布尔属性

createWebsocket=true/false

这表示是否应该创建Bean ObservationWebSocketClient。如果属性值为假,我根本不想建立Web套接字连接。

有没有技术上的可能性来实现这一点?


答案 1

虽然我没有使用过此功能,但似乎您可以使用spring 4的@Conditional注释来执行此操作。

首先,创建一个类,其中 的 可以访问 :ConditionConditionContextEnvironment

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
@Conditional(MyCondition.class)
public ObservationWebSocketClient observationWebSocketClient(){
    log.info("creating web socket connection...");
    return new ObservationWebSocketClient();
}

编辑注释已一般地实现了这一点;用于评估它的源代码可以在github上找到,对于那些感兴趣的人。如果您发现自己经常需要这种功能,那么建议使用类似的实现,而不是进行大量的自定义实现。spring-boot@ConditionalOnPropertyConditionCondition


答案 2

使用 注释 Bean 方法。@ConditionalOnProperty("createWebSocket")

请注意,Spring Boot提供了许多预先打包的有用条件。