Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что-то не так с AspectJ 5 expression 
:(
    Опции темы
alivesubstance
Дата 10.1.2011, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 22.9.2008
Где: СПб

Репутация: нет
Всего: нет



Всем привет.

Сел разобраться с аспектами, с реализацией из spring. Возникло желание осуществить следующее. Представим, что есть какой-то класс сервиса, каждый метод которого помечен как @Transactional. Свои обязанности он делегирует различным классам. 
Пусть эти классы имплементят интерфейс Parent. Хочу написать аспект с around advice, который будет отслеживать вызов метода сервиса и настроить параметр target, так что ProceedingJoinPoint.getTarget() вернет мне потомка класса Parent.

Код

class app.domain.ChilOne implements app.domain.Parent {...}
class app.domain.ChidTwo implements app.domain.Parent {...}

interface app.service.Service
{
    void doIt( SomeObject obj );
}

class app.service.ServiceImpl implements Service {
@Autowired
public ChildOne childOne;

@Autowired
public ChildTwo childTwo;

public void doIt( SomeObject obj )
{
     childOne.doIt( obj );  
}

public void doItAgain( SomeObject obj )
{
     childTwo.doIt( obj );  
}


Вот так можно повесить аспект на все методы интерфейса Service:
Код

@Around( "execution(* app.service.Service.*(..))" )


Вот так пишется в мануале spring можно повесить на все методы с аннотацией @Transactional, но у меня не получается, не работает:
Код

@Around("@annotation(org.springframework.transaction.annotation.Transactional)")


А так, если хотим перехватывать методы во всех потомках Parent:
Код

@Around("target(app.domain.Parent)")


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

@Around( "within(app.service.Service) && target(app.domain.Parent)" )

или

@Around( "this(app.service.Service) && target(app.domain.Parent)" )

или 

@Around( "this(app.service.Service) && execution(public * *(..)) && target(app.domain.Parent)")


но нифига не помогает. Как можно такое осуществить?
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0424 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.