Spring AOP игнорирует некоторые методы сервиса Hessian - PullRequest
2 голосов
/ 28 февраля 2011

У меня есть Aspect со следующим определением pointcut

@Pointcut("execution(public de.company.project..* *(..))")

и конфигурацией пружины, содержащей следующее

<aop:aspectj-autoproxy />

<bean id="myaspect"
        class="de.company.project.impl.MyAspect" />

<bean id="someService" class="de.company.project.impl.SomeService" />

<bean name="/SomeService"
    class="org.springframework.remoting.caucho.HessianServiceExporter">
    <property name="service" ref="someService" />
    <property name="serviceInterface"
        value="de.company.project.interf.SomeService" />
</bean>

(в реальной конфигурации несколько служб)

Я вижу, что аспект вызывается в некоторых методах, но не во всех.Я подозреваю (но пока не совсем уверен), что только методы, объявленные непосредственно в интерфейсе, оборачиваются аспектом, а методы, объявленные в суперинтерфейсе, игнорируются (хотя этот интерфейс должен совпадать с той же точкой).

Этоожидаемое поведение?Как я могу это изменить?Что еще может происходить?

Ответы [ 2 ]

2 голосов
/ 16 марта 2011

Ответ таков: я испортил паттерн Pointcut. Похоже на это

@Pointcut("execution(public de.company.project..* *(..))")

указывает пакет типа возврата, тогда как этот

@Pointcut("execution(public de.company.project..*(..))")

указывает пакет того типа, который имеет метод.

см. Мне нужно объяснение точечной резки Spring AOP

1 голос
/ 28 февраля 2011

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

Я знаю, что Spring AOP не будет перехватывать вызовы локальных методов.Т.е. применяемый прокси-сервер не перехватывает вызовы, если тот же объект вызывает свой собственный метод, даже если он соответствует выражению pointcut.

EDIT: другое предположение.Вы уверены, что все ваши экземпляры рассматриваемых классов являются кодом, управляемым Spring?Есть ли вероятность, что некоторые части вашего кода (или библиотеки) создают экземпляры классов без использования Spring?Если такие вещи случаются, Spring AOP не может перехватывать такие bean-компоненты, поскольку Spring AOP переплетается только с bean-управляемыми bean-компонентами.

...