How do we use conditional join points in spring

In my requirement, the point cut has to be applied if the method name is insert OR the method name is update OR method name is delete AND the method should have exactly three arguments

This was the code I wrote,

  <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>

There is something wrong with the below line; I get an error saying the expression is not well formed.

    <aop:pointcut id="auditInsertUpdateOrDelete" expression="insert || delete || update"/>
有帮助吗?

解决方案

You need a complex pointcut which contains all the logic in a single expression. You are trying to refer to your other pointcuts within your expression, which just doesn't work.

You need to do something like this:

<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>

Here is a good reference for building complex expressions: http://forum.springsource.org/showthread.php?37596-complex-pointcut-expressions

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top