Я пытаюсь захватить изменение подписи метода и выбросить ошибку, когда это произойдет. Но ошибка объявить не работает, как ожидалосьAspectj объявляет ошибку не работает должным образом
@DeclareError("call(* a.b.C.method(..)) && !call(* a.b.C.method(int))")
public static final String errorMsg= "Signature error";
Это всегда соответствия вызова этого метода.
Но если я переместил этот pointcut на @Before, то он не будет соответствовать, если подпись метода не изменилась.
Любая идея о том, почему по-разному поведение между @DeclareError & @ Прежде чем говорить о точках?
Thanks
Вы правы. Я протестировал этот простой тестовый пример, и он работает нормально. Однако при использовании сложных объектов в качестве параметров, а не в String и int, они всегда совпадают. Моя подпись метода что-то вроде этого (MyObject, boolean, String, MyObject1, MyObject2, MyObject3, MyObject3) – user2546541
Я нашел проблему. Я должен указать полное имя класса моих объектов для его работы. (a.b.MyObject, boolean, String, a.b.MyObject1, a.b.MyObject2, a.b.MyObject3, a.b.MyObject3) Спасибо за помощь Фред. Проблема закрыта – user2546541
Да, полное имя класса необходимо, если вы используете стиль кодировки @AspectJ. Если вы используете собственный синтаксис, вам не нужно это делать, потому что вы можете просто импортировать все классы, используемые, как обычно, в Java. – kriegaex