AspectJ обработка методов List
От: shrize  
Дата: 03.06.10 14:51
Оценка:
Добрый день, только начал изучать АОП в частности 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);??
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.