смешивание Spring AOP и компилятора аспектов?

У меня есть существующий проект, построенный на spring.

Я хотел бы перехватывать вызовы HibernateTemplate.save(), поэтому я определяю pointcut для exec(save()) и регистрирую время в совете вокруг.

Я мог бы определить аспекты с помощью Spring AOP, но я вижу, что Spring AOP работает только в том случае, если объект в pointcut является bean-компонентом, но в моем случае HibernateTemplate может быть создан в new() непосредственно в существующем клиентском коде.

поэтому я должен использовать компилятор аспекта через плагин maven. Интересно, есть ли какие-либо потенциальные конфликты для смешивания Spring AOP и аспекта? ---- предыдущие разработчики этого проекта, возможно, где-то уже использовали Spring AOP

Спасибо, Ян.


person teddy teddy    schedule 29.11.2011    source источник


Ответы (2)


Обычно я использую AspectJ вместо Spring-Proxy-AOP для всех своих приложений Spring. Для этого вам нужно установить некоторую конфигурацию spring, в основном установить что-то вроде mode="AspectJ". Как только я забыл это для некоторых из этих конфигураций, это означает, что приложение использовало AspectJ для некоторых аспектов и Spring-Proxy-AOP для других, и да, приложение работало правильно (за исключением случаев, когда мне действительно нужен AspectJ вместо pring-Proxy- АОП).

Итак, с моей точки зрения: если у вас достаточно тестовых случаев, попробуйте их.

person Ralph    schedule 29.11.2011

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

Мой единственный совет — как можно больше использовать стиль @AspectJ, чтобы вы могли легко изменить его с помощью незначительных изменений конфигурации.

Если вы не знакомы со стилем аннотаций, дополнительную информацию о нем можно найти в блоге Эспена Бернтсена, шпаргалка @AspectJ

person Espen    schedule 29.11.2011