프로그래밍 노트/SPRING BOOT
@Conditional, @ConditionalOnXXX
깡냉쓰
2019. 11. 18. 21:32
728x90
반응형
@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());
}
}
728x90
반응형