论坛首页 Java版 Spring

探讨有关@target的使用问题

浏览 332 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-11-10
Spring2之后引入了AspectJ的Pointcut表达式,相应的也可以使用@target这个标志符来指定pointcut,但在近来测试这个标志符的时候遇到几个问题,提出来,看大家有何看法!?

1-@target在spring reference中,开始定义的时候,意思是当前运行的对象如果标注了@target所指定的Annotation的话,则对象内所有joinpoint(method execution in spring)将被匹配,但到Sample那个部分的时候,意思好像又变成“目标对象如果标注了@target指定的Annotation,目标对象内的所有joinpoint将被匹配”,这个是疑点之一;

2-如果我指定@target(MyAnnotation)作为pointcut表达式的话,当对象Foo标注有MyAnnotation,并且作为Target被拦截,还好,可以成功,但是,如果我指定另一个对象作为Target,那么不好意思,空指针异常,令我匪夷所思,即使pointcut不对该对象进行匹配,也不应该抛出空指针异常啊?!
Exception in thread "main" java.lang.NullPointerException
	at org.aspectj.weaver.reflect.ShadowMatchImpl$RuntimeTestEvaluator.visit(ShadowMatchImpl.java:182)
	at org.aspectj.weaver.ast.HasAnnotation.accept(HasAnnotation.java:31)
	at org.aspectj.weaver.reflect.ShadowMatchImpl$RuntimeTestEvaluator.matches(ShadowMatchImpl.java:121)
	at org.aspectj.weaver.reflect.ShadowMatchImpl.matchesJoinPoint(ShadowMatchImpl.java:78)
	at org.springframework.aop.aspectj.AspectJExpressionPointcut.matches(AspectJExpressionPointcut.java:297)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:154)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
	at $Proxy0.isInterceptable(Unknown Source)
	at org.darrenstudio.books.unveilspring.aop.pointcut.aspectj.AjExpressionTester.testTargetAnnotationPontcut(AjExpressionTester.java:94)
	at org.darrenstudio.books.unveilspring.aop.pointcut.aspectj.AjExpressionTester.main(AjExpressionTester.java:44)


哪位能够对这种情况给予分析?!
   
论坛首页 Java版 Spring

跳转论坛:
JavaEye推荐