본문 바로가기
개발/SpringBoot

SpringBoot 설정에 따른 동적 빈 생성

by 궁즉변 변즉통 통즉구 2021. 12. 9.
반응형

SpringBoot application.yml 설정에 따라 빈을 동적으로 등록/제외해야 하는 경우 @ConditionalOnProperty 어노테이션을 사용해 간단히 처리 할 수 있다.

 

예를 들어 아래와 같이 application.yaml있고, 'sample.enable' 가 true일 경우만 특정 빈을 생성해야 하는 경우 아래 예시와 같이 설정을 한다.

아래와 같이 선언하게 되면 sample.enable이 true인 경우 SampleProp빈이 Spring Context에 등록이 된다.

@Bean
@ConditionalOnProperty(value = "sample.enable", havingValue = "true", matchIfMissing = false)
public SampleProp sampleProp() throws Exception {
    return new SampleProp();
}

@ConditionalOnPropertyr 의 각 속성은

  • value : 체크 할 application.yml 의 항목
  • havingValue: 비교 할 값, application.yaml 해당 항목의 값이 이 값과 동일하면 빈 생성
  • matchIfMissing: application.yml에 해당 항목이 없을 경우 빈 생성을 할 것인지(false인 경우 해당 항목 없으면 생성안함)

 

추가적으로 Spring Boot에서 자동 설정이 적용되는 조건이나 시점 등에 따라 다양한 어노테이션을 아래와 같이 지원하고 있다.

조건 어노테이션 적용 조건
 @ConditionalOnBean  해당 Bean 이나 이름이 미리 Bean 팩토리에 포함되어 있는 경우
 @ConditionalOnClass  해당 클래스가 classpath에 있는 경우
 @ConditionalOnCloudPlatform  해당 클라우드 플랫폼이 활용 상태인 경우
 @ConditionalOnExpression  SpEL에 의존하는 조건인 경우
 @ConditionalOnJava  JVM 버전이 일치하는 경우
 @ConditionalOnJndi  JNDI가 사용 가능하고 특정 위치에 있는 경우
 @ConditionalOnMissingBean  해당 Bean 이나 이름이 미리 Bean 팩토리에 포함되어 있지 않은 경우
 @ConditionalOnMissingClass  해당 클래스가 classpath에 없는 경우
 @ConditionalOnNotWebApplication  웹 애플리케이션이 아닌 경우
 @ConditionalOnProperty  특정 프로퍼티가 지정한 값을 갖는 경우
 @ConditionalOnResource  특정 Resource가 classpath에 있는 경우
 @ConditionalOnSingleCandidate  지정한 Bean이 이미 Bean 팩토리에 포함되어 있고 단일 후보자로 지정 가능한 경우
 @ConditionalOnWebApplication  웹 애플리케이션인 경우

 

아래는 자동 설정을 위한 순서 어노테이션이다.

순서 어노테이션 설명
 @AutoConfigureAfter  지정한 특정 자동 설정 클래스들이 적용된 후에 해당 자동 설정을 적용
 @AutoConfigureBefore  지정한 특정 자동 설정 클래스들이 적용되기 전에 해당 자동 설정을 적용
 @AutoConfigureOrder  자동 설정 순서 지정을 위한 Spring Framework @Order의 변형 어노테이션
 (기존 설정 클래스에는 영향을 주지 않고 자동 설정 클래스들 간의 순서만 지정)

출처: https://freestrokes.tistory.com/107 [FREESTROKES DEVLOG]

반응형

댓글