Использование условных точек соединения весной
Как мы используем условные точки соединения весной
В моем требовании, точка должна быть применена, если имя метода вставлено ИЛИ имя метода обновлено ИЛИ имя метода удалено И метод должен иметь ровно три аргумента
Это был код, который я написал,
<aop:config>
<aop:aspect ref="auditAOP">
<aop:pointcut id="insert" expression="execution(* .IbatisDAOSupportImpl.insert(*,*,*))" />
<aop:pointcut id="delete" expression="execution(* IbatisDAOSupportImpl.delete(*,*,*))" />
<aop:pointcut id="update" expression="execution(* IbatisDAOSupportImpl.update(*,*,*))" />
<aop:pointcut id="auditInsertUpdateOrDelete" expression="insert || delete || update"/>
<aop:after method="afterInsertUpdateOrDelete" pointcut-ref="auditInsertUpdateOrDelete"/>
</aop:aspect>
</aop:config>
Что-то не так с приведенной ниже строкой; Я получаю сообщение о том, что выражение не правильно сформировано.
<aop:pointcut id="auditInsertUpdateOrDelete" expression="insert || delete || update"/>
1 ответ
Решение
Вам нужен сложный pointcut, который содержит всю логику в одном выражении. Вы пытаетесь сослаться на другие точки в своем выражении, которые просто не работают.
Вам нужно сделать что-то вроде этого:
<aop:config>
<aop:aspect ref="auditAOP">
<aop:pointcut id="auditInsertUpdateOrDelete" expression="within(*.IbatisDAOSupportImpl)
and (execution( * insert*(..)) or
execution( * delete*(..)) or
execution( * update*(..)))"/>
<aop:after method="afterInsertUpdateOrDelete" pointcut-ref="auditInsertUpdateOrDelete"/>
</aop:aspect>
</aop:config>
Вот хороший справочник для построения сложных выражений: http://forum.springsource.org/showthread.php?37596-complex-pointcut-expressions