수색…


비고

조건을 사용할 때주의해야 할 중요한 사항

  • 조건 클래스는 직접 클래스 (스프링 빈이 아닌)로 참조되므로 @Value 속성 삽입을 사용할 없으므로 다른 스프링 빈을 그 안에 삽입 할 수 없습니다.
  • From java docs - 조건은 BeanFactoryPostProcessor 와 동일한 제한 사항을 따라야하며 bean 인스턴스와 결코 상호 작용하지 않도록주의해야합니다 . BeanFactoryPostProcessor 는 Bean 정의와 상호 작용하고 수정할 수 있지만 인스턴스는 bean 화하지 않을 수도있다. 그렇게하면 조기에 bean 인스턴스화가 발생하고 컨테이너를 위반하여 의도하지 않은 부작용이 발생할 수 있습니다.

특성 또는 값이 지정된 경우에만 Bean 등록

스프링 빈은 특정 값을 가지 거나 지정된 속성이 충족 될 때만 등록되도록 구성 할 수 있습니다. 이렇게하려면 Condition.matches 를 구현하여 속성 / 값을 확인하십시오.

public class PropertyCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        return context.getEnvironment().getProperty("propertyName") != null;
        // optionally check the property value
    }
}

Java 구성에서 위의 구현을 bean을 등록하는 조건으로 사용하십시오. @Conditional 어노테이션 사용에주의하십시오.

@Configuration
public class MyAppConfig {

    @Bean
    @Conditional(PropertyCondition.class)
    public MyBean myBean() {
      return new MyBean();
    }
}

PropertyCondition 에서는 여러 조건을 평가할 수 있습니다. 그러나 각 조건을 느슨하게 결합 된 상태로 유지하기 위해 구현을 분리하는 것이 좋습니다. 예 :

@Configuration
public class MyAppConfig {

    @Bean
    @Conditional({PropertyCondition.class, SomeOtherCondition.class})
    public MyBean myBean() {
      return new MyBean();
    }
}

조건 주석

main @conditional 주 Annotation을 제외하고는 다른 경우에 사용될 비슷한 annotation이있다.

수업 조건

@ConditionalOnClass@ConditionalOnMissingClass 주석은 특정 클래스의 유무에 따라 구성을 포함 할 수 있습니다.

예를 들어 OObjectDatabaseTx.class 가 종속성에 추가되고 OrientWebConfigurer 빈이 없으면 구성 OrientWebConfigurer 만듭니다.

@Bean
@ConditionalOnWebApplication
@ConditionalOnClass(OObjectDatabaseTx.class)
@ConditionalOnMissingBean(OrientWebConfigurer.class)
public OrientWebConfigurer orientWebConfigurer() {
    return new OrientWebConfigurer();
}

콩 조건

@ConditionalOnBean@ConditionalOnMissingBean 어노테이션은 특정 빈의 유무에 따라 빈을 포함 할 수 있도록한다. value 속성을 사용하여 유형별로 빈을 지정하거나 이름을 사용하여 빈을 지정하는 이름을 지정할 수 있습니다. 검색 속성을 사용하면 Bean을 검색 할 때 고려해야하는 ApplicationContext 계층 구조를 제한 할 수 있습니다.

정의 된 bean이 있는지 여부를 확인할 때 위의 예를 참조하십시오.

부동산 조건

@ConditionalOnProperty 주석은 Spring 환경 속성을 기반으로 구성이 포함되도록합니다. 접두어 및 이름 속성을 사용하여 확인할 속성을 지정합니다. 기본적으로 존재하고 false 가 아닌 모든 특성이 일치합니다. 또한 havingValuematchIfMissing 속성을 사용하여 고급 검사를 만들 수도 있습니다.

@ConditionalOnProperty(value='somebean.enabled', matchIfMissing = true, havingValue="yes")
@Bean 
public SomeBean someBean(){
}

리소스 조건

@ConditionalOnResource 주석은 특정 리소스가있는 경우에만 구성을 포함 할 수 있도록합니다.

@ConditionalOnResource(resources = "classpath:init-db.sql") 

웹 응용 프로그램 조건

@ConditionalOnWebApplication@ConditionalOnNotWebApplication 주석은 응용 프로그램이 '웹 응용 프로그램'인지 여부에 따라 구성을 포함 할 수 있습니다.

@Configuration
@ConditionalOnWebApplication
public class MyWebMvcAutoConfiguration {...}

SpEL 발현 조건

@ConditionalOnExpression 주석은 SpEL 표현식의 결과를 기반으로 구성이 포함되도록합니다.

@ConditionalOnExpression("${rest.security.enabled}==false")


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow