Использование условных точек соединения весной - PullRequest
2 голосов
/ 28 ноября 2011

Как мы используем точки условного соединения весной

По моему требованию, точка должна быть применена, если имя метода вставлено, ИЛИ имя метода обновлено, ИЛИ имя метода удалено, И метод должен иметь ровно три аргумента

Это был код, который я написал,

  <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 Ответ

1 голос
/ 28 ноября 2011

Вам нужен сложный 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

...