2016-04-01 8 views
1

私は迎撃結合界面でロガーインターセプタを定義しようとしています:ポストコンストラクトメソッドの@Target({METHOD、TYPE})とのインターセプタバインディングインターフェイスを使用できませんか?

@Inherited 
@InterceptorBinding 
@Retention(RUNTIME) 
@Target({METHOD, TYPE}) 
public @interface OperationLogger { 

    @Nonbinding 
    public String operationName() default ""; 
    @Nonbinding 
    public String details() default ""; 
} 

が、GlassFishの4.1戻り、コンパイル中にこのエラーメッセージ:

インターセプターライフサイクルコールバックインターセプタ[クラス comのため。 adldoost.dwm.security.interceptor.OperationLoggerInterceptor インターセプト@OperationLogger]宣言とインターセプタバインディング interface com.adldoost.dwm.security.interceptorbinding.OperationLogger メソッドを@Targ et。

も8.1エディタが指示のNetBeans:ライフサイクルコールバック

インターセプターのみ@Target(TYPE)のように定義されるインターセプタ 結合タイプを宣言することができます。インターセプタ com.adldoost.dwm.security.interceptor.OperationLoggerInterceptor は不一致のインターセプタバインディングを宣言します com.adldoost.dwm.security.interceptorbinding.OperationLogger。

私の間違いは何ですか?

答えて

0

あなたはこのようなライフサイクル・コールバック・メソッドを傍受しようとしている:

@Stateless 
public class MrBean { 

    @PostConstruct 
    @OperationLogger 
    private void init() { 
     // ... 
    } 

} 

それとも

@Stateless 
@OperationLogger 
public class MrBean { 
    @PostConstruct 
    // ... 
} 

をあなたがMETHODとの結合インターセプタを使用して(@PreDestroy含む)ライフサイクルコールバックを傍受することはできませんそれが目標ですOperationLoggerのターゲットをちょうど@Target(TYPE)にするか、クラス全体に注釈を付けるライフサイクルコールバックに注釈を付けないでください。

+0

ターゲットは@Target({METHOD、TYPE})に設定されています。それをTYPEに変更する必要がありますか? –

+0

私が言ったように、あなたのバインディングに '@Target(TYPE)'だけで注釈を付けたり、クラスに '@ OperationLogger'を追加したりしないでください。ライフサイクルコールバックメソッドです。 – andrepnh

関連する問題