2014-02-04 2 views
1

Стандартный пример использования Spring AOP для управления транзакциями с помощью следующей конфигурации:Как я могу написать выражение с пересечениями, которая не требует AspectJWeaver

<aop:config> 
    <aop:pointcut id="myaop" expression="execution(* my.package.*.*(..))" /> 
    <aop:advisor advice-ref="txAdvice" pointcut-ref="myaop" /> 
</aop:config> 

Однако это требует что AspectJWeaver.jar находится в пути к классам. Можно ли написать этот pointcut без необходимости в этой зависимости? Я понимаю, что Spring AOP зависит от некоторых классов от AspectJWeaver, без фактического использования тренда времени загрузки, но можем ли мы использовать Spring AOP, не требуя этого банку вообще? В документации не указано нигде, что банка является необходимой зависимостью, если вы не используете специальные аннотации AspectJ. И файл POM для Spring AOP перечисляет его как дополнительную зависимость.

ответ

2

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

Вы можете, например, создать экземпляр JdkRegexpMethodPointcut и связать его с зарегистрированным советником.

<bean id="myaop" class="org.springframework.aop.support.JdkRegexpMethodPointcut"> 
    <property name="pattern" value=".*get.*" /> 
</bean> 

Однако я настоятельно рекомендую оставаться с AspectJ поддерживать его гораздо более мощным и простым в использовании, чем старые реализации. Классы aspectj, которые он использует, предназначены для разбора pointcut и понимания языка AspectJ.

+0

Замечательный. Я никогда не знал, что это возможно. Спасибо @M. Deinum – Hrishikesh

Смежные вопросы