Configuration 후보 중 빈 오브젝트로 등록이 되어 구성이 적용되게하거나 적용되지 않도록 선택하게하는 방법
Condition
인터페이스를 구현한 클래스)**는 꼭 등록해야됨참고) 코드가 보이기 쉽게 중첩 static class를 작성
빈으로 등록할지, 등록하지 않을지를 matches 메서드의 반환 값을 통해서 결정할 수 있음
@MyAutoConfiguration
@Conditional(JettyWebServerConfig.JettyCondition.class)
public class JettyWebServerConfig {
@Bean("jettyWebServerFactory")
public ServletWebServerFactory servletWebServerFactory() {
return new JettyServletWebServerFactory();
}
static class JettyCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return true; // Jetty 서버를 사용할 것 이므로
}
}
}
@MyAutoConfiguration
@Conditional(TomcatWebServerConfig.TomcatCondition.class)
public class TomcatWebServerConfig {
@Bean("tomcatWebServerFactory")
public ServletWebServerFactory servletWebServerFactory() {
return new TomcatServletWebServerFactory();
}
static class TomcatCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return false;
}
}
}
@Conditional은 @Configuration 클래스와 @Bean 메서드에 적용이 가능
@Configuration 클래스에 적용하는 경우 ( 클래스 레벨 )
@Bean 메서드에 적용하는 경우 ( 메서드 레벨 )
@Configuration 클래스와 @Bean 메서드에 적용하는 경우
@Bean 메서드에 아무것도 적용하지 않는 경우