[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.이 기능을 사용하지는 않았지만 스프링 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.bean 메소드에 @ConditionalOnProperty ( "createWebSocket") 주석을 달아 라.
bean 메소드에 @ConditionalOnProperty ( "createWebSocket") 주석을 달아 라.
Spring Boot는 미리 패키지 된 많은 유용한 조건을 제공합니다.
-
==============================
3.나 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 환경은 @Profiles가 환경에만 기반한 논리를 기반으로 할 수있는 @ 조건부 주석이 조건부 bean 등록 변수 만.
나 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 환경은 @Profiles가 환경에만 기반한 논리를 기반으로 할 수있는 @ 조건부 주석이 조건부 bean 등록 변수 만.
from https://stackoverflow.com/questions/29844271/conditional-spring-bean-creation by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Dozer가 최대 절전 모드 지연로드를 트리거하지 못하도록합니다. (0) | 2019.01.09 |
---|---|
[SPRING] HibernateTransactionManager 또는 JpaTransactionManager (0) | 2019.01.09 |
[SPRING] Tomcat으로 Spring Boot를 시작할 때 username과 password는 무엇입니까? (0) | 2019.01.08 |
[SPRING] Spring - 현재 스레드에 대해 실제 트랜잭션을 사용할 수있는 EntityManager가 없음 - 'persist'호출을 안정적으로 처리 할 수 없음 (0) | 2019.01.08 |
[SPRING] 스프링에 중복 된 양식 제출 [마감] (0) | 2019.01.08 |