Я не знаю, возможно ли это, но я пытаюсь написать pointcut, который будет соответствовать любому методу, возвращающему объект, реализующий определенный интерфейс.
Учитывая следующее:
public class User implements Auditable{
private int id;
private String name;
public String getName(){
return name;
}
}
и интерфейс Auditable:
public interface Auditable{
public String getName();
}
И какой-то случайный класс:
public class RandomClass{
public User getNewUser(){
User u = new User();
return u;
}
}
Как я могу написать pointcut «AfterReturning», который будет перехватывать любой метод с именем getNew*, который реализует Auditable?
Следующие работы:
pointcut auditablePointcut(): call(public * *.getNew*(..))
однако это будет соответствовать любому возвращаемому типу. Не работает следующее:
pointcut auditablePointcut(): call(public Auditable *.getNew*(..))
Я предполагаю, что мог бы написать это с помощью if(), но это кажется немного неуклюжим (я еще не пробовал). Или есть более элегантный способ?