2013-04-16 9 views
5

예를 들어 주석 문자열 값을 무시하는 인터셉터 한정자 주석을 만드는 방법이 있습니까? 예annotation value()를 무시하는 인터셉터 한정자를 만듭니다.

:

Log.java

@Inherited 
@InterceptorBinding 
@Target({ElementType.METHOD, ElementType.TYPE}) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface Log { 
    String value() default ""; // <---- ignore this 
} 

LogInterceptor.java

@Log 
@Interceptor 
public class LogInterceptor implements Serializable { 

    ... 
} 

Usage.java

@Log("message for this log") 
public String interceptedMethod(String param) { 
    ... 
} 

주석 value("message for this log")이 한정자로 작동하지만 한정자가 아닌 메시지 로그 인 value()을 사용하고 싶기 때문에이 방법이 작동하지 않습니다.

답변

9

그런 목적으로 @Nonbinding 어노테이션을 사용할 수 있습니다. @Nonbinding 멤버에 주석을 달아 컨테이너가 한정자 유형의 멤버를 무시하도록 할 수 있습니다. 다음 예제를보십시오 :

@Qualifier 
@Retention(RUNTIME) 
@Target({METHOD, FIELD, PARAMETER, TYPE}) 
public @interface PayBy { 
    PaymentMethod value(); 
    @Nonbinding String comment() default ""; 
} 

@PayBy 한정자로 bean을 일치시킬 때 주석이 무시됩니다. 이것을 설명하는 CDI 문서에 대한 참조는 here입니다.