0

속성 값에 따라 다른 구성 클래스를 가져올 주석을 원합니다. 그것은이 같은 일을 수 있습니다@ConditionalOnExpression을 사용하여 주석의 속성 값을 확인할 수 있습니까?

(이 모든이 의사 코드)

주석 :

import org.springframework.context.annotation.Import; 

import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.TYPE) 
@Import(RedisConfig.class) 
@Import(HazelCastConfig.class) 
public @interface EnableCaching 
{ 
    Class cacheType() default Redis.class; 
} 

CONFIGS 중 하나의 예 :

import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; 
import org.springframework.cache.annotation.EnableCaching; 

import java.util.List; 

@EnableCaching 
@ConditionalOnExpression("#{T(com.mypackage.CacheAnnotationMatcher).checkCacheType(com.mypackage.Redis.class)}") 
public class RedisConfig 
{ 
    //...elided... 
} 

CacheAnnotationMatcher.checkProperty 내가 만든 클래스와 메서드는 @EnableCaching 주석을 찾고 cacheType 속성을 확인하고 true/false를 반환합니다.

답변

0

여기 @ConditionalOnExpression을 사용할 수 있다고 생각합니다. 코드가 작동하지 않는 이유를 알았습니까? 시도해 보셨습니까?

+0

클래스를 전달할 수 없습니다. 오류가 발생합니다. 그리고 "*"는 모든 패키지를 허용하지 않습니다. yaml 속성을 전달하는 방법이 있습니까? –

+0

클래스를 전달할 수 있습니다 :'... checkCacheType (Class.forName ('com.something.Clazz'))'. 또는 String으로 전달하고 클래스의 String 표현을 비교합니다. 나는 완전히 확신하지 못합니다. yaml 속성을 전달하면 무슨 뜻입니까? – helospark

+0

예,해야한다면 문자열로 전달 하겠지만 클래스로 전달하는 것을 선호합니다. –