Я работаю с кодовой базой компании, у которой есть политика написания большого количества протоколов трассировки. Так почти каждый метод имеет кусок кода, который начинается так:Использование аннотаций для ведения журнала трассировки
String LOG_METHOD = "nameOfMethod(String,List<Long>):void";
if(logger.isTraceEnabled()) {
Object[] params = new Object[] { string, list };
logger.trace(CompanyMessages.newMethodInstanceMessage(this, LOG_METHOD, params));
}
и конец, как это (либо в finally
-clause или просто в конце метода:
if(logger.isTraceEnabled()) {
logger.trace(CompanyMessages.leaveMethodInstanceMessage(this, LOG_METHOD));
}
Там на самом деле это больше кода, но это основная идея. Это загромождение кода, и другие кодеры постоянно испортили его своими интерпретациями, которые не используют конкретный класс CompanyMessages
, который необходим для форматирования сообщений до читайте инструменты мониторинга. Поэтому я ищу способ избавиться от все код выше и просто предоставить все методы, которые требуют отслеживания с аннотациями, такими как: @LogBefore('logLevel')
& @LogAfter('logLevel')
.
Причина, по которой я выбираю это решение, - это сделать так, чтобы другим разработчикам не приходилось изучать что-либо новое, кроме как использовать аннотации вместо кода. Я работаю в среде сервера, в которой мы развертываем сотни веб-приложений и десятки разработчиков. Поэтому я искал способ реализовать это в веб-приложении без большого количества дополнительного кодирования или дополнительных больших библиотек. Это означает, что я ищу небольшую стабильную реализацию АОП, используя аннотации, подобные тем, которые я предложил, легко настраиваемые в каждом веб-приложении. Производительность также важна. Каков самый простой пример для реализации этого с помощью АОП?
Редактировать: Я нашел something very similar, что я ищу, но у этого есть пара проблем. Все классы, требующие ведения журнала, должны быть настроены, что будет более ресурсоемким, чем просто использование аннотаций. Будет ли конфигурация пружины <aop:aspectj-autoproxy/>
исправить это?
Спасибо, это заставило меня понять, что мой взгляд на работу аннотаций был испорчен. – mahler