Spring AOP点切割错误

时间:2013-04-12 15:49:18

标签: java spring aop

我试图捕获覆盖spring的验证方法后发出的所有错误。

我收到以下错误

Pointcut is not well-formed: expecting ')' at character position 135

我尝试了很多组合,例如在前后放置')'并删除但仍然得到相同的错误。我正在学习Spring,所以不确定这是否真的是实现aop的方式。可以告诉我哪里错了或纠正我

这是实现验证方法的类

package com.myapplication.validations

public class MyValidate implements Validator{{

        public boolean supports(Class<?> clazz) {
        return MyValidate.class.equals(clazz);
    }

       public void validate(Object target, MyApplicationErrors errors) {

         //all validations

       }
}

现在在我的spring application-context.xml中,我编写了以下aop

<aop:aspectj-autoproxy />

    <bean id="captureErrors"
        class="com.myapplication.aop.CaptureAllErrors" />

    <aop:aspect ref="captureErrors">

        <aop:pointcut id="magicallyCaptureErrors" 
                      expression="execution(* com.myapplication.validations.MyValidate.validate(Object, com.myapplication.allerrors.MyApplicationErrors ))  and args(Object target, com.myapplication.allerrors.MyApplicationErrors errors)" />

        <aop:after-returning pointcut-ref="magicallyCaptureErrors" method="getAllErrors"/>

    </aop:aspect>

    </aop:config>

我捕获的所有错误类如下

package com.myapplication.aop
@Aspect
@Component
public class CaptureAllErrors {


public void getAllErrors(Object target, com.myapplication.allerrors.MyApplicationErrors errors){


log.info(errors.toString());
}

}

2 个答案:

答案 0 :(得分:1)

你的表达的角色135从这里开始:

and args(Object target
               ^

args()切入点应该列出参数的类型,而不是类型和名称。所以试试这个:

and args(Object, MyApplicationErrors)

同样值得指出的是,整个args()表达式是多余的,因为execution()切入点也指定了方法参数所需的签名。

答案 1 :(得分:0)

我认为还有额外的&#39;)&#39;在135,这将提前关闭点切割

验证(Object,com.myapplication.allerrors.MyApplicationErrors)&#39;)&#39;

expression =&#34; execution(* com.myapplication.validations.MyValidate.validate(Object,com.myapplication.allerrors.MyApplicationErrors)和args(Object target,com.myapplication。 allerrors.MyApplicationErrors错误)&#34;

一旦你删除它,你会没事的。