论坛首页 Java企业应用论坛

Pointcut命名有可能导致错误

浏览 3971 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-02-28  
使用Spring @AspectJ方式的AOP,代码
@Aspect
public class AndyaoAspect {

  @Pointcut("execution(* com.andyao.Repository.get(java.lang.Integer))&& args(id)")
  public void get(Integer id){
  }
  
  @Around("get(id)")
  public Object fromCache(ProceedingJoinPoint pjp, Integer id) throws Throwable {
    ...
  }

}

这段代码看上去没有什么问题,但是真正执行中,会抛出exception

@Around("get(id)")
java.lang.IllegalArgumentException: Pointcut is not well-formed: expecting 'name pattern' at character position 6

 翻阅文档发现问题所在:

写道
其他的切入点类型

完整的AspectJ切入点语言支持额外的切入点指定者,但是 Spring不支持这个功能。 他们分别是call, initialization, preinitialization, staticinitialization, get, set, handler, adviceexecution, withincode, cflow, cflowbelow, if, @this 和 @withincode。 在Spring AOP中使用这些指定者将会导致抛出IllegalArgumentException异常。

Spring AOP支持的切入点指定者可能在将来的版本中得到扩展,不但支持更多的AspectJ 切入点指定者(例如"if"),还会支持某些Spring特有的切入点指定者,比如"bean"(用于匹配bean的名字)。
 所以在使用spring AOP的时候不能以上面的诸如call,get等命名,不然就会报异常。
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics