2016-04-01 6 views
1

Я пытаюсь определить регистратор перехватчик с связывающим интерфейсом перехватчика:не может использовать интерфейс привязки перехватчика с помощью @Target ({МЕТОД, ТИП}) для методов постконструкции?

@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 с МЕТОДОМ как его @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 
    // ... 
} 

Вы не можете перехватывать жизненный цикл обратных вызовов (в том числе @PreDestroy), используя перехватчик связывания с METHOD как цель. Задайте цель OperationLogger только @Target(TYPE) или не комментируйте обратные вызовы жизненного цикла, которые включают аннотирование всего класса.

+0

Моя цель настроена на: @Target ({МЕТОД, ТИП}) не только метод! мне нужно изменить его только на ТИП?! –

+0

Как я уже сказал, либо аннотируйте свою привязку только с помощью '@Target (TYPE)' или не добавляйте '@ OperationLogger' в свой класс и это методы обратного вызова жизненного цикла. – andrepnh