Ведение журнала операций AspectJ

У меня есть интерфейс CUDService, который содержит операции создания, обновления и удаления в моем проекте. Все мои сервисы реализуют этот интерфейс. CUDServiceImpl — это абстрактный класс, который реализует CUDService и имеет общедоступные методы (создание, обновление, удаление). Например, у меня есть интерфейс StudentService с двумя методами.

public interface StudentService extends CUDService,Logged{

addMark();
deleteMark();

}

public class StudentServiceImpl extends CUDServiceImpl implements StudentService{

@Override addmark...
@Override deletemark..


}

Обратите внимание на интерфейс Logged! Это пустой интерфейс, который я создал для маркировки Сервисов, которые я хочу, чтобы аспект J помечал для ведения журнала.

pointcut аспекта J определяется следующим образом:

выполнение(* com.history.Logged+.*(..))

и это работает для методов addMark(),deleteMark(), НО это не работает для методов create,update,delete, определенных в CUDServiceImpl! Это сработает, если я переопределю эти методы в классе StudentServiceImpl следующим образом:

@Override create(){
super.create();
}

но я хотел бы, чтобы это работало без переопределения всех методов из CUDService. Заранее спасибо!


person zevonja    schedule 29.03.2012    source источник


Ответы (1)


CUDServiceImpl не реализует интерфейс Logged, поэтому его методы не пересекаются с аспектом. Вот почему вы должны переопределить его в классе, который его реализует.

person Slobodan    schedule 29.03.2012