Я пытаюсь понять AspectJ. Я хочу попытаться подсчитать все инициализации объектов (которые инициализируются из указанных мной классов, а не некоторых внутренних Java) в проекте, и я действительно не уверен, как это сделать.AspectJ: отслеживать инициализацию нового объекта
Предположим, что у меня есть классы, называемые A и B, где A имеет подклассы Aa и Ab, B имеет подклассы Ba и Bb, а Bb имеет подкласс Bba. Я хотел бы, чтобы мой аспект отслеживал каждую инициализацию объектов, созданных с этими классами в качестве базы, но я действительно не понимаю, как правильно это сделать (хотя это должно быть несколько простым). До сих пор, у меня есть что-то похожее на это:
public aspect AspectCounter {
private int objects = 0;
pointcut countObjects() : initialization(A.new(..)) || initialization(B.new(..));
pointcut printObjects() : call(* Test.printCounter(..));
after() : countObjects() {
objects++;
}
after() : printObjects() {
System.out.println(objects);
}
}
Что же, по крайней мере, напечатать нужное количество элементов а и Б, которые я создал (я не пошел с B * .new (..) так как это, как я понимаю, отслеживать любую инициализацию Bba три раза, что я не хочу в этом случае). То, как это работает прямо сейчас, состоит в том, что у меня есть класс Test, который, ну, проверяет материал, и после того, как я закончил тестирование, я просто вызываю пустой метод printCounter, который на самом деле ничего не делает. Кажется, что он работает и действительно дает мне правильное количество объектов, но я уверен, что есть лучший способ сделать это. Мне действительно не нравится иметь пустой метод.