반응형
@Conditional
spring4 부터 사용가능하며, Java configuration에서 조건적으로 Spring Bean을 등록할 수 있다.
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Conditional {
/**
* All {@link Condition}s that must {@linkplain Condition#matches match}
* in order for the component to be registered.
*/
Class? extends Condition[] value();
}
// Condtion.class
public interface Condition {
boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata);
}
SpringBoot는 @Conditional을 확장하여, 여러가지 어노테이션을 제공한다.
- @ConditionalOnWebApplication : 프로젝트가 웹 애플리케이션이면 Bean 등록
- @ConditionalOnBean: 해당 Bean이 존재하면 자동 설정 등록
- @ConditionalOnMissingBean: 해당 Bean이 존재하지 않으면 자동설정 등록
- @ConditionalOnClass: 해당 클래스가 존재하면 자동설정 등록
- @ConditionalOnMissingClass: 해당 클래스가 클래스 패스에 존재하지 않으면 Bean 등록
- @ConditionalOnResource: 해당 자원(file 등)이 존재하면 자동설정 등록
- @ConditionalOnProperty: 설정한 프로퍼티가 존재하면 자동설정 등록
ex)
@Configuration
@ConditionalOnClass(XmlMapper.class) // XmlMapper.class가 있으면 자동 등록
@ConditionalOnBean(Jackson2ObjectMapperBuilder.class) // Jackson2ObjectMapperBuilder가 있으면 자동등록
protected static class MappingJackson2XmlHttpMessageConverterConfiguration {
@Bean
@ConditionalOnMissingBean // 해당빈 MappingJackson2XmlHttpMessageConverter 이 존재하지 않으면 빈등록
public MappingJackson2XmlHttpMessageConverter mappingJackson2XmlHttpMessageConverter(
Jackson2ObjectMapperBuilder builder) {
return new MappingJackson2XmlHttpMessageConverter(builder.createXmlMapper(true).build());
}
}
반응형
'프로그래밍 노트 > SPRING BOOT' 카테고리의 다른 글
Validation 알아보기_1(Hibernate Validator) (0) | 2021.01.09 |
---|---|
[Spring Boot] 외부설정하기 (externalized configuration) (2) | 2019.11.18 |
[Spring Boot] Custom한 배너를 만들어보자! (0) | 2019.11.05 |
[Spring Boot] freemarker 설정하기 (0) | 2019.11.05 |
[Spring Boot] Servlet, Servlet-filter 설정 (1) | 2019.11.05 |