Подтвердить что ты не робот

Использует Spring AOP для регистрации хорошей идеи?

Сейчас я читаю Spring, и один из примеров, используемых для использования AOP, регистрирует начало и конец вызовов методов.

Я также читал, что использование АОП может повлиять на производительность.

Использует Spring AOP хорошую идею для такого типа ведения журнала? Я понимаю, что Spring использует Dynamic AOP, было бы лучше использовать Static AOP (Like AspectJ) для этого типа AOP.

Вкратце политика кодирования компании, в которой я работаю, требует смехотворного количества протоколирования, и я хочу уменьшить количество кода регистрации, которое мне нужно написать и улучшить читаемость моего кода.

Я лаяю неправильное дерево?

4b9b3361

Ответ 1

Прочитайте этот блог-пост о ваших проблемах с производительностью.

Способ думать о АОП состоит в том, чтобы в первую очередь поставить предоставленные функциональные преимущества. Если автоматическое ведение журнала - это ваше требование, и AOP подходит для него - идите на это.

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

Ответ 2

Я использовал Spring АОП для реализации протоколирования, поэтому я разделяю свои наблюдения:

  • Влияние производительности не является достаточным, оно меньше воздействия самого ведения журнала
  • Имея аспекты, настроенные в конфигурации Spring, вы можете в случае необходимости полностью отключить код ведения журнала
  • Отладка становится более проблематичной, так как трассировки стека становятся более длинными
  • Такое решение достаточно влияет на дизайн. Это не только то, что вы получаете кучу интерфейсов и классов аспект, но вы производственные классы должны быть очень "тонкими". Не забывайте, что вы не можете перехватывать вызовы для непубличных методов. Самостоятельные вызовы (даже публичные методы) также не могут быть перехвачены (поскольку вы работаете с голой дескриптором this вместо дескриптора, завернутого AOP) и, следовательно, не могут быть зарегистрированы. Таким образом, все записи могут происходить только на границах интерфейса. (Это касается использования апробирования на основе прокси-сервера, там есть возможность выполнения подкласса времени выполнения cglib, но я его не использовал).
  • Написание pointcut может быть очень сложным. IntelliJ Idea помогает значительно определить, какие методы должны быть рекомендованы pointcut.
  • В общем, мне понравился этот подход и думаю, что его стоит использовать, но он оказался намного сложнее, чем я ожидал

Ответ 3

Я сделал это так же, как описано в этом сообщении в блоге. Это лучшее, что я нашел, и оно также имеет образец, который прекрасно показывает разницу между использованием и использованием AOP.

Imho это не стоит, если вы не делаете что-то более увлекательное, а затем регистрируетесь, как управление ошибками с сохранением. Если у вас есть хорошая иерархия исключений (домен, система) и правильно заданы границы ведения журнала, вы не сможете значительно сократить код ведения журнала.