Сегодня поговорим о той проблеме, с которой пришлось столкнуться намедни. Нужно было логировать только определенные методы и классы в спринговом приложении. В интеренетах полно решений для всех методов, но мало для конкретных. Поэтому восполним этот пробел нижеследующим решение.
Для начала напишем элементарную аннотацию (в дальнейшем, если хотите) ее можно расширить
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Retention(RetentionPolicy.RUNTIME) | |
@Target(ElementType.METHOD) | |
public @interface Atom { | |
} |
Затем аннотируем необходимый метод
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Atom | |
public void index() { | |
System.out.println("generate index page"); | |
} |
Далее напишем аспектноориентированный метод (вот такое словосочетание) который будет отлавливать нашу аннотацию. Тут все просто (после выполнения инструкций) - срабатывает лог. Мы говорим, что делаем это для любого метода (нам не интересно ни что он возвращает, ни как называется, ни какие аргументы имеет), у которого есть наша аннотацию
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Aspect | |
public class AtomAdvice { | |
@After("execution(* *.*(..)) && @annotation(atom) ") | |
public void myBeforeLogger(JoinPoint joinPoint, Atom atom) { | |
System.out.println("log atom annotation"); | |
} | |
} |
Ну и не забываем добавить в конфиг наш аспектноориентированный подход :) А также просканировать пакет, где этот класс содержится (component-scan)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<aop:aspectj-autoproxy/> |
No comments:
Post a Comment