2013-04-16 13 views
5

アノテーション文字列の値を無視して修飾するためのインターセプタ修飾子アノテーションを作成する方法はありますか?例えばアノテーション値を無視するインターセプタ修飾子を作成する

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で見つけることができます。

関連する問題