powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / AspectJ
12 сообщений из 12, страница 1 из 1
AspectJ
    #37907805
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер, господа.

Заполз ко мне в голову один умный таракан, я подумал, что если в проекте подключить AspectJ для логирования?
Надоели в коде куски типа LOG.debug(...). Правильно я понимаю, что с помощью AspectJ можно необходимое множество методов расширить таким образом, чтобы они логировались на входе и выходе? Тогда часть сквозного функционала по логированию уйдет.
Местами я использую интерсепторы для логирования Stateless бинов. Но не одними Stateless бинами живет наше приложение и существует множество классов, на которые повешать интерсепторы нет возможности. Их приходится логировать вручную на входе и выходе, что, конечно же, доставляет.
На сколько я знаю, AspectJ работает без рефлексии и следовательно не сказывается негативно на производительности. Смущает только один момент - где-то слышал, что AspectJ - как черный ящик: что он и как делает с байт-кодом - одному ему известно. И в продакшн может идти страшно после модификаций байткода AspecjJ.
Теперь собственно вопрос: какие есть подводные камни с AspectJ, может кто-нибудь обжегся чем-нибудь?

Спасибо!
...
Рейтинг: 0 / 0
AspectJ
    #37908062
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AOP для логирования не очень подходит. IMO логирование кода это вещь достаточно интелектуальная.

AOP подходит для трасировки. Вызов метода с такими параметрами, на выходе результат такой-то.
...
Рейтинг: 0 / 0
AspectJ
    #37908089
Kostya Ilyinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rabiter,

У нас в проекте Spring AOP используется для сбора бизнес-событий - то бишь тоже нужно нырнуть в параметры, убедиться что все нужные параметры имеются в контексте, и сохранить в базу. Версия АОП от спринга - весьма усеченная и не позволяет некоторых трюков, на которые способен полноценный AspectJ - но для большинства задач вполне хватит. Никакой черной магии - все отлично работает в продакшене. Спринговые штучки для управления транзакциями наверняка же используете - тот же подход для оборачивания вашего метода методом эдвайса.
...
Рейтинг: 0 / 0
AspectJ
    #37908999
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vas0,

Спасибо за ответ. Да, хотя бы от трассировки от ручной избавиться (так называемый invoke around аспект если не ошибаюсь)
...
Рейтинг: 0 / 0
AspectJ
    #37909008
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kostya Ilyinovrabiter,

У нас в проекте Spring AOP используется для сбора бизнес-событий - то бишь тоже нужно нырнуть в параметры, убедиться что все нужные параметры имеются в контексте, и сохранить в базу. Версия АОП от спринга - весьма усеченная и не позволяет некоторых трюков, на которые способен полноценный AspectJ - но для большинства задач вполне хватит. Никакой черной магии - все отлично работает в продакшене. Спринговые штучки для управления транзакциями наверняка же используете - тот же подход для оборачивания вашего метода методом эдвайса.

Спасибо за ответ. Спринг не использую в проекте. Проект на EJB и CDI. Конечно, некоторые бины обернуты интерсепторами - так сказать проксированы. Все же попробую AspectJ на зубок, если понравится, может получится протолкнуть в проект.
...
Рейтинг: 0 / 0
AspectJ
    #37909759
Фотография dmitriyche
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rabiter,

AspectJ очень хорошо справляется с логированием.

ButWith great power comes great responsibility.
...
Рейтинг: 0 / 0
AspectJ
    #37910103
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitriycheAspectJ очень хорошо справляется с логированиемнет )
сказали же уже 12978548
...
Рейтинг: 0 / 0
AspectJ
    #37910211
Фотография dmitriyche
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.net, позвольте перефразировать мой пост.

dmitriycheAspectJ очень хорошо справляется с логированием.

В тех ситуациях, которые возникали на моей практике, AspectJ справился отлично. В моём восприятии его кросс-каты - это как селекторы в CSS, вы всегда можете подстроить нужный уровень логирования от более абстрактных вещей (пакеты, классы) до более низких (проперти).
...
Рейтинг: 0 / 0
AspectJ
    #37910247
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitriychegrasoff.net, позвольте перефразировать мой пост.

dmitriycheAspectJ очень хорошо справляется с логированием.

В тех ситуациях, которые возникали на моей практике, AspectJ справился отлично. В моём восприятии его кросс-каты - это как селекторы в CSS, вы всегда можете подстроить нужный уровень логирования от более абстрактных вещей (пакеты, классы) до более низких (проперти).

Да, но кросс-каты можно не везде воткнуть если я правильно понимаю. Посередине метода, например нельзя. Таким образом логирование через AspectJ сводится к простой трассировке вызова методов. Поправьте меня если я не прав.
...
Рейтинг: 0 / 0
AspectJ
    #37910576
Фотография dmitriyche
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rabiterДа, но кросс-каты можно не везде воткнуть если я правильно понимаю. Посередине метода, например нельзя. Таким образом логирование через AspectJ сводится к простой трассировке вызова методов. Поправьте меня если я не прав.

AspectJ поддерживает как момент захода в метод, так и вызов метода.
Ведь вы же к чему-то обращаетесь в середине метода. Следайте кросс-кат на обращение, которое происходит внутри другого кросс-ката.

Пример в данное время дать не могу.
...
Рейтинг: 0 / 0
AspectJ
    #37911322
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitriycheВедь вы же к чему-то обращаетесь в середине метода. Следайте кросс-кат на обращение, которое происходит внутри другого кросс-ката.

Пример в данное время дать не могу.дак я зато дам )

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
@LogWithAspectJ
public void colokato(String param) {
  int a = 1;
  int b = remoteService.getB(); // это не наш сервис (даааа, для него можно сделать wrapper)
  param = convert(param);
  // тут залогируйка

  int c = colokato(a, b, param);
  
  // тут залогируйка
}

private String convert(String s) {
  // тут залогируй-ка
  s = remoteService.process(kkk);
  s = ...;
  s = s.substring(...);
  return s;
}
...
Рейтинг: 0 / 0
AspectJ
    #37911980
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitriyche, grasoff.net, спасибо за ответ :-)

Вообщем, следующее заключение я сделал - можно попробовать AspectJ для трассировки вызова методов. Надо только еще сделать так, чтобы входные/выходные параметры тоже в трассу попадали.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / AspectJ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]