Pull to refresh

Comments 17

Я бы все-таки упомянул EJB в названии статьи.
хотел изначально, да все никак не получалась нормальная формулировка,
но спасибо, что напомнили, надеюсь обновленное название будет конкретнее
вот так сразу понятно, о чем речь )
Спасибо за статью!
Хотелось бы упомянуть механизмы Java, с помощью которых можно решить такую же задачу, но по другому: java.lang.instrument package и JPDA.
И фреймворки и инструменты: Javassist, ObjectWeb ASM, BCEL, JOIE, reJ JavaSnoop, Serp, JMangler
Может кому-нибудь будет полезно.
Я правильно понимаю, что механизм схож с aspectJ и spring'овыми аспектами? В чём разница, какие преимущества/недостатки, например, как обстоят дела с перехватом внутриклассовых вызовов?
Для меня было удобно то, что не нужны дополнительные зависимости,
а проект предполагал, что чем меньше их чем лучше.
Подробнее об отличиях рассказать не могу, так как не работал с aspectJ.
А по сути механизмы работы схожие, все они AOP дополнения
Разница в том что, то что относится к EJB соответствует некоторому Java EE стандарту, например JSR 220. А так да все это механизмы AOP. Довольно щирокая тема, в Spring оно давно есть (не секрет что в стандарты Java EE добавляют многие плюшки под впечатлением от Spring), в том числе иногда удобно вешать адвайсы по поинткатам описанным в XML, без всяких аннотаций (то есть не трогая кода).
использую их для кеширования объектов, проверяю в интерсепторе кеш и отдаю из него объект если есть, или дальше context.proceed();
метод, результат которого должен быть закеширован помечается аннотаций, удобно мне показалось
Конечно удобно, причем что хорошо в AOP адвайсы можно включать/отключать не меняя кода. Да аспекты работает поверх существующего кода, как бы дополнительный слой, паутина, именно поэтому используются для сквозного функционала (типа навешать на код логирование, кешированию, сикюрность и тд).
а есть такое же, но для обычной явы? Без XMLов всяких, на аннотациях?
для SE не знаю, на ум приходит только в перехватываемом методе в начале получить объект Method метода якобы интерсептора и выполнить на нем invoke
если вы context.proceed(); уберете, что вы возвращаете в методе? null?
Если убрать, то выполнение не будет обратно передано перехваченному методу, или другому интерсептору.
Например, если не прошла валидация, значит дальнейшее выполнение не нужно.
Например так:
if(isValid()){
    context.proceed();
}  else {
    thrown NoValidationException();
}
Не увидел в статье связи между классом Count и LifeLogger. В частности интересует: почему на getMultiplyResult срабатывает только LifeLogger, а на getSummResult срабатывают оба интерцептора? У getMultiplyResult у Вас нет аннотации, указывающей на интерцептор. Правильно я понимаю, что в этом случае LifeLogger у Вас объявлен в дескрипторе развертывания?
Спасибо, что указали,
по невнимательности пропустил кусок, что весь класс потом пометил @Interceptors(LifeLogger.class)
ну и да, пометить через дескриптор развертывания весь класс дало бы такой же результат
Sign up to leave a comment.

Articles