Conditional spring bean creation

后端 未结 4 1318
悲哀的现实
悲哀的现实 2020-12-03 04:42

I have a question about Spring annotation configurations. I have a bean:

@Bean 
public ObservationWebSocketClient observationWebSocketClient(){
    log.info(&         


        
4条回答
  •  攒了一身酷
    2020-12-03 05:08

    Though I've not used this functionality, it appears that you can do this with spring 4's @Conditional annotation.

    First, create a Condition class, in which the ConditionContext has access to the 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"));
        }
    }
    

    Then annotate your bean:

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

    edit The spring-boot annotation @ConditionalOnProperty has implemented this generically; the source code for the Condition used to evaluate it is available on github here for those interested. If you find yourself often needing this funcitonality, using a similar implementation would be advisable rather than making lots of custom Condition implementations.

提交回复
热议问题