2016-04-01 39 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回報編譯此錯誤消息:

攔截器的生命週期回調攔截[類 融爲一體。 adldoost.dwm.security.interceptor.OperationLoggerInterceptor 截取@OperationLogger]聲明和攔截器綁定 接口com.adldoost.dwm.security.interceptorbinding.OperationLogger 以METHOD作爲它的@Targ等。

也NETBEANS 8.1編輯告訴:

爲生命週期回調攔截器可以僅聲明定義爲@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