我试图捕获覆盖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());
}
}
答案 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;
一旦你删除它,你会没事的。