>  기사  >  Java  >  SpringBoot의 @Conditional 주석은 무엇입니까? 그것을 사용하는 방법?

SpringBoot의 @Conditional 주석은 무엇입니까? 그것을 사용하는 방법?

不言
不言원래의
2018-09-26 14:36:282848검색

이 글의 내용은 SpringBoot의 @Conditional 주석이 무엇인지에 관한 것입니다. 그것을 사용하는 방법? 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

@Conditional Annotation의 일부 기능이 최근 프로젝트에서 사용되었는데, 이를 기록하기 위해 이 글을 썼습니다

@Conditional이 무엇인가요?

@Conditional 주석은 무엇인가요? 코드에 설정된 조건에 따라 서로 다른 Bean을 로드할 수 있습니다. 예를 들어 인터페이스에 두 개의 구현 클래스가 있는 경우 이 인터페이스를 Spring 관리에 넘겨주고 싶을 때 일반적으로 하나만 선택합니다. 구현 클래스 중 하나인 현재로서는 if-else를 사용할 수 없으므로 @Conditional 주석이 나타납니다.

어떻게 사용하나요?

SpringBoot에서 @Conditional 주석은 단독이 아니라 가족입니다. 여러 멤버와 사용 방법을 살펴보겠습니다.

@ConditionalOnBean
샘플 코드

@Bean
@ConditionalOnBean(RedisConnectionFactory.class)
   public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
       RedisTemplate<Object, Object> template = new RedisTemplate<Object, Object>();
       template.setConnectionFactory(connectionFactory);
       template.setKeySerializer(new StringRedisSerializer());
       template.afterPropertiesSet();
       return template;
   }

이 방법 @ConditionalOnBean 주석은 다음과 같습니다. 추가되었으며 주석의 속성은 RedisConnectionFactory입니다. 이는 Redis의 관련 구성 정보를 구성하면 RedisTemplate을 인스턴스화하여 작동하게 한다는 것입니다. Redis의 관련 구성을 구성하지 않으면 인스턴스화하지 않습니다(결국 존재하더라도). 구성이 없으면 인스턴스화는 오류를 보고합니다. )
그뿐만 아니라 다음과 같이 재생할 수도 있습니다.

빈 이름에 따라 @ConditionalOnMissingBean(이름 = “connectionFactory”) 또는 @ConditionalOnMissingBean(주석 = EnableSyjRateLimit.class) ) 주석에 따라 다른 멋진 작업을 수행할 수 있습니다

  1. @ConditionalOnMissingBean
    이것은 1보다 Missing이 하나 더 많은 것입니다. 이름에서 알 수 있듯이 존재하지 않는 특정 Bean을 인스턴스화한다는 의미는 무엇입니까? .

  2. @ConditionalOnClass (특정 클래스가 존재하는 경우에만 Bean이 인스턴스화됨)

  3. @ConditionalOnMissingClass (특정 클래스가 존재하지 않는 경우에만 Bean이 인스턴스화됨)

  4. @ConditionalOnProperty(prefix = " syj", name = "algorithm", hadValue = "token")
    좀 더 복잡합니다. 즉, 구성 파일에 syj라는 접두사가 붙은 속성이 있는 경우 속성 이름은 알고리즘이고 그 다음에는 해당 속성이 value 클래스는 토큰인 경우에만 인스턴스화됩니다.

    그리고 이 속성도 더 나은 속성을 가지고 있습니다.
    @ConditionalOnProperty(prefix = “syj”, name = “algorithm”, hadValue = “counter”, matchIfMissing = true)
    matchIfMissing은 모두 만족하지 않는 경우를 의미합니다. 이 속성 syj.algorithm이 counter

  5. @ConditionalOnJava(Java 애플리케이션인 경우)

  6. @ConditionalOnWebApplication(웹 애플리케이션인 경우)
    과 동일한지 여부에 관계없이 기본적으로 구현됩니다. @Conditional 식구들에 관해서는 아주 일부분만 얘기해 봤습니다
    식구들이 아마 이 정도일 겁니다:
    SpringBoot의 @Conditional 주석은 무엇입니까? 그것을 사용하는 방법?
    더 알고 싶은 어린이 신발은 이 패키지를 참고하세요
    org.springframework.boot.autoconfigure.condition

위에서 많이 말씀하셨는데 아직도 만족스럽지 못해요

사실 왜 만족스럽지 못할까요? 예를 들어 SpringBoot를 사용하지 않은 경우 이를 사용자 정의하려고 합니다. 그럼 이번에는 무엇을 해야 할까요?

먼저 규칙 클래스를 맞춤설정하세요

public class MyCondition implements Condition    
{    
      
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata)    
    {    
    		//在这里写你的逻辑,比如说你想a>0时实例化类A,a<0时不实现
        return a>0;    
    }    
}

그런 다음 사용할 수 있습니다

@Bean
    @Conditional(MyCondition.class)
    public A a(){
    	return new A()
    }

위 내용은 SpringBoot의 @Conditional 주석은 무엇입니까? 그것을 사용하는 방법?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.