静态切入点评估完成后

时间:2015-10-14 14:29:13

标签: spring aop aspectj

Spring AOP编织过程在运行时完成,当对该特定方法发出请求时,将创建一个新的代理对象,该对象包装您当前的对象并且该调用被截获。

我的假设是否正确?

第二件事是如果这个过程是运行时那么什么是静态切入点?什么时候评估这些切入点?

1 个答案:

答案 0 :(得分:1)

你的理解是错误的。在应用程序启动时仅创建一次代理,而不是每次在对象上调用方法时。 (除非你有一个原型作用域的AOP Scoped Proxy,但这种情况极不可能)。

@Aspect
public MyAspect {

    @Pointcut("execution(* foo.bar.MyService.foo(..)) and args(x, ..)"
    public Object around(ProceedingJoinPoint pop, MyObject x) { ... }

}

鉴于上述方面,execution(* foo.bar.MyService.foo(..))是连接点的静态部分,无论对类型的检查如何,都可以匹配。 args(x, ..)是动态的,因为如果x(本例中的第一个参数)的类型为MyObject,则需要在运行时确定它。

该部分无法静态确定,只能在实际调用期间确定。基本上任何依赖于运行时信息的东西都是动态的。