Pointcut конструктора Aspectj по умолчанию

Я работаю с некоторым кодом AspectJ, и я хочу поймать все выполнения без частных точек.

@Pointcut("execution(public * *(..))")//Public
public void publicMethod(){};
@Pointcut("execution(protected * *(..))"//Protected
public void protectedMethod(){}

@Pointcut("@annotation(mypackage.name.annotationName")
public void annotationPointcut(){}

@Around("annotationPointcut() && (protectedMethod() || publicMethod())")
public Object test(){ System.out.println("Should not print private"); }

Я читал об использовании ! (нет), но не смог заставить его работать. Что-то типа

@Pointcut("!execution(private * *(..))"

Но без того, чтобы заставить его работать.

Я не смог найти имя модификатора для модификатора класса по умолчанию в аспекте J, я пропустил его или мне нужно попытаться решить его с помощью! не подписать как-то?

С уважением, новый разработчик, который изучает аспект J.


person Nosfert    schedule 04.08.2015    source источник


Ответы (1)


Попробуйте это, чтобы поймать все не частные методы.

@Pointcut("execution(!private * *(..))")
person dogant    schedule 04.08.2015
comment
Это правильно, но я хочу добавить объяснение, почему !execution(private * *(..)) неверно: это означает перехватывать все точки соединения, которые являются чем-то иным, чем выполнение приватных методов. Хотя это действительно перехватывает выполнение общедоступных, защищенных и локальных методов пакета, оно также перехватывает многие другие точки, например. вызовы методов (не то же самое, что выполнение), вызовы и выполнения конструктора, инициализация статического конструктора и конструктора метода, доступ для получения/установки члена и т.д. Таким образом, вы получаете слишком много хитов. Вот почему wheee прав, а Nosfert нет. - person kriegaex; 04.08.2015
comment
Сладкий! Это было все о том, где ! знак должен быть! :) - person Nosfert; 05.08.2015