Как создать аспект в Интерфейсном Методе, который расширяется от "Супер" Интерфейса - PullRequest
5 голосов
/ 10 февраля 2011

У меня есть интерфейс уровня обслуживания, который расширяется от базового интерфейса;Я хотел бы создать Pointcut вокруг моего интерфейса уровня обслуживания, но с помощью одного из методов, определенных в базовом интерфейсе.

Например ... У меня есть метод в базовом интерфейсе, который называется "save () ", Я поместил его в свой базовый интерфейс, поскольку только все мои" дочерние "интерфейсы будут обеспечивать функциональность" сохранения ".

Я хотел бы создать PointCut только на одном из моих «дочерних» интерфейсов, когда будет вызвано мое «save».

Я создал pointcut следующим образом:

@Pointcut("execution(* com.xyz.someapp.ChildServiceInterface.save(..))")  
public void childServiceSavePointCut();

Затем я создал совет @Around для указанного выше pointcut, как показано ниже:

@Around("childServiceSavePointCut()")
public void doMyAdvice()....

где "ChildServiceInterfacemsgstr "расширяет другой интерфейс, в котором определен метод" save () ".

Мой Совет никогда не запускается ... Я отладил свой код и не вижу своего Совета в списке Советников для моей целевой службы.

Я не уверен, что это сработает, или я неправильно его реализую?

Ответы [ 2 ]

14 голосов
/ 10 февраля 2011

Вместо этого попробуйте этот pointcut.

within(com.xyz.someapp.ChildServiceInterface+) && execution(* save(..))

+ указывает образец подтипа .

2 голосов
/ 02 июля 2017

Или вы можете поставить pointcut на все методы этого класса, используя

@Pointcut("execution(* com.xyz.someapp.ChildServiceInterface.*(..))")  
public void childServiceSavePointCut();

* указывает на все типы методов.

...