Добрый день, только начал изучать АОП в частности AspectJ; хочу решить следующую задачу.
Есть класс:
public class Main {
public static void main(String[] args) {
Main mn=new Main();
Student student=new Student();
List<Student> students=mn.getList();
students.add(student);
System.out.println(students);
}
public List<Student> getList(){
List<Student> students=new LinkedList<Student>();
Student student=new Student();
students.add(student);
return students;
}
}
Хочу перехватить вот это students.add(student) + получить у какого объекта был получен List.
Для этого реализовал аспект
@Aspect
public class AOPtest {
@Pointcut("call(*List Object+.get*(..))&&target(main)")
public void getCollection(Object main){}
@Pointcut("call(* List.add(Object))&&args(student)")
public void addToCollection(Student student){}
@Before("cflow(getCollection(main))&&addToCollection(student)")
public void add(Object main, Student student, JoinPoint point){
student.setFio(main.toString());
}
}
Когда компилируется AspectJ показывает, что нашел два advice в main и в getList.
Но при запуске отрабатывает только один

который в getList
Хотелось бы уточнить
1. это реально сделать?
2. понятие cflow -это ограничивает видимость последующих pointcut-ов. То есть, как у меня в методе getList вызов students.add(student);??