복붙노트

[SPRING] 조건부 스프링 빈 생성

SPRING

조건부 스프링 빈 생성

봄 주석 구성에 대한 질문이 있습니다. 나는 콩이있다 :

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

나는 속성 파일을 가지고있다 :

@Autowired
Environment env;

속성 파일에서 특수 부울 속성을 갖고 싶습니다.

createWebsocket=true/false

Bean ObservationWebSocketClient를 작성해야하는지 여부를 표시합니다. 속성 값이 false이면 웹 소켓 연결을 설정하고 싶지 않습니다.

이것을 실현할 기술적 인 가능성이 있습니까?

해결법

  1. ==============================

    1.이 기능을 사용하지는 않았지만 스프링 4의 @Conditional annotation을 사용하여이 작업을 수행 할 수 있습니다.

    이 기능을 사용하지는 않았지만 스프링 4의 @Conditional annotation을 사용하여이 작업을 수행 할 수 있습니다.

    먼저 ConditionContext가 환경에 액세스 할 수있는 Condition 클래스를 만듭니다.

    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 annotation @ConditionalOnProperty는 이것을 일반적으로 구현했다; 그것을 평가하는 데 사용 된 Condition의 소스 코드는 github에서 관심있는 사람들을 위해 여기에서 얻을 수 있습니다. 이 funcitonality가 필요할 때가 많다면 비슷한 구현을 사용하는 것이 커스텀 Condition 구현을 많이하는 것보다 바람직합니다.

  2. ==============================

    2.bean 메소드에 @ConditionalOnProperty ( "createWebSocket") 주석을 달아 라.

    bean 메소드에 @ConditionalOnProperty ( "createWebSocket") 주석을 달아 라.

    Spring Boot는 미리 패키지 된 많은 유용한 조건을 제공합니다.

  3. ==============================

    3.나 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 환경은 @Profiles가 환경에만 기반한 논리를 기반으로 할 수있는 @ 조건부 주석이 조건부 bean 등록 변수 만.

    나 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 환경은 @Profiles가 환경에만 기반한 논리를 기반으로 할 수있는 @ 조건부 주석이 조건부 bean 등록 변수 만.

  4. from https://stackoverflow.com/questions/29844271/conditional-spring-bean-creation by cc-by-sa and MIT license