2015-10-14 13 views
0

當對該特定方法發出請求時,將在運行時完成Spring AOP編織過程,然後創建一個包裝當前對象並攔截該調用的新代理對象。完成時的靜態切入點評估

我對我的假設正確嗎?

第二件事是如果這個過程是運行時然後什麼是靜態切入點?當這些切入點被評估?

回答

1

你的理解是錯誤的。代理程序在應用程序啓動時只創建一次,而不是每次在對象上調用方法時創建。 (除非您有一個AOP作用域代理,它的原型範圍很大,但是這種情況極不可能)。

@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類型的值,則需要在運行時確定它。

該部分不能靜態確定,但只能在實際調用期間確定。基本上任何依賴運行時信息的東西本質上都是動態的。