error at ::0 can't find referenced pointcut和error at ::0 formal unbound in point

    在使用注解配置Spring AOP过程中发现两个error:

1. error at ::0 can't find referenced pointcut

2. error at ::0 formal unbound in point

 

    对于第1个错误,网上的说法是,如果使用的spring 2.0的版本中的的aspectjrt.jar和jdk6不兼容。

    说下我的环境,JDK7 + Spring 3.6.6,因此不是aspectjrt.jar问题(何以如此确定?请看下文)。最初我也尝试使用不同版本的aspectjrt.jar文件,但都不起作用。于是我怀疑可能是aspectjweaver.jar的问题,因为使用的版本较低(1.5的)。

    于是下载了新版本aspectjweaver-1.6.12替换掉旧的,第1个错误就解决了,而且classpath中没包含aspectjrt.jar。

 

    再来说下第2个错误,贴下我的代码:

	@After("testBeanExecution()")
	public void afterCall(Joinpoint jp) {
		System.out.println("After");
	}

   修改为:

	@After("testBeanExecution()")
	public void afterCall() {
		System.out.println("After");
	}

   这样第2个错误就没了。也就是说去掉afterCall方法中的参数就可以了。

 

   事实上这种解决办法是不对的,原因是Spring的AOP没那么残废,而是我们使用的不对。

 (1)如果要访问JoinPoint,那么我们只需要将org.aspectj.lang.JoinPoint作为通知(advice,如afterCall)中的第一个参数就可以了。那么为什么上面的代码会出错呢。很简单,请仔细看其中的参数,我使用的是org.aopalliance.intercept.Joinpoint,来自aopalliance.jar包。这是使用IDE的自动补全功能时很容易犯的一个错误。所以请确认你写的是否是JoinPoint。

  (2)如果要给通知(advice)传递参数,请使用args参数,如下:

@Before("com.xyz.myapp.SystemArchitecture.dataAccessOperation() &&" + 
        "args(account,..)")
public void validateAccount(Account account) {
  // ...
}

 

  详细的使用请参考Spring文档吧。顺便附上Spring AOP依赖的jar包。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值