Аннотации и точки AOP действительны.Используйте аннотации, чтобы предупредить платформу AOP о регистрации.
Еще одна вещь, которую я хотел бы сделать, это исправить ваш регистратор.
У вас есть:
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) );
}
Вместо этого рассмотрите что-то вродеэто:
logger.trace(this, LOG_METHOD, string, list);
и вы можете реализовать это следующим образом:
public void trace(Object obj, Object args...) {
if (parentLogger.isTraceEnabled()) {
logger.trace(CompanyMessages.newMethodInstanceMessage(obj, LOG_METHOD, args);
}
}
Большинство утилит ведения журнала были написаны до того, как у нас были varargs в Java, поэтому мы по-прежнему видим такие вещи, как вымы уже написали.
Мы все еще хотим, чтобы защита не давала журнал вызовов, когда он не включен, но основной причиной этого является то, что большинство людей в прошлом делали то, что вы делали, или, что еще хуже:
logger.trace("My message: " + string + " with list " + list);
Имеет дорогостоящее выражение независимо от того, включена трассировка или нет.
Но используя varargs, вы можете получить и то, и другое.Просто используйте что-то вроде MessageFormat (что вы, вероятно, уже делаете), вы можете легко получить:
logger.trace("My message: {0} with list {1}", string, list);
При отключенной трассировке это дешевый вызов метода, передающий 3 указателя.Таким образом, у вас гораздо меньше мотиваций, чтобы охранять его и загромождать ваш код.
Большинство современных регистраторов не слишком хорошо переопределяют, поэтому обычно вам нужно инкапсулировать его, а не просто расширять.
Он не решает вашу проблему напрямую, динамически генерируя информацию трассировки.Но это простая золотая середина, которая легко и постепенно очищает существующую базу кода.
Кроме того, есть 2 других варианта.
Один из них - использовать постпроцессор, который проходит через вашкод и добавляет вход в тех местах, где он еще не существует.Это избавляет вас от необходимости набирать текст вручную, но он загромождает код (поскольку он все еще существует ВЕЗДЕ).
Два - использование процессора аннотаций во время компиляции.Это более изощренно.Но то, что он делает, это во время компиляции, он проходит и расширяет ваши классы во время компиляции с информацией.Приятно то, что ваш код чист (за исключением, возможно, аннотации), но также вся работа выполняется при компиляции.Там не влияние времени выполнения, не модные загрузчики классов фабрики объектов.Как только он собран, вы можете выбросить свой процессор, он вообще не нужен во время выполнения.
Есть проект, имя которого ускользает от меня, который использует это.Он автоматически добавляет сеттеры / геттеры в ваш код при компиляции.Я слышал хорошие новости об этом.
Фреймворки AOP вполне могут сделать это для вас при компиляции, я недостаточно знаком с ними, чтобы сказать, но в любом случае, метод стоит изучить.
Как минимум, оберните свой регистратор.Он является инкрементным, безопасным и постепенно очистит ваш код и поможет вести журналы, где аннотации могут вообще не работать.