簡體   English   中英

Spring框架中的Pointcut如何在內部工作

[英]How does a Pointcut in Spring framework work internally

我只是想知道,Spring框架中的Pointcut如何在內部工作。 它如何知道接下來要執行的方法(然后它在方法執行之前/之后完成它的工作)? 它以某種方式使用反射嗎? 即使我在Pointcut定義中放置調試點,調試器也不會命中它。

它通過代理您的預期方法來實現。 對方法的調用將替換為對代理方法的調用。 代理方法首先執行before-Annotations,然后調用原始方法,然后執行after-Annotations。

代理方法是syntetic,它不會出現在您的代碼中,因此您無法添加斷點。

我所理解的是,這是一個編織過程。 如果您認為您的切入點只是簽名,那么它們可以靈活地從包,接口,類或方法甚至通配符中進行選擇。

當您的應用程序加載Spring類創建所有目標的代理時,這就是為什么在我看來使用通配符不是一個好主意,而是應用於特定目標。 在目標上創建代理的過程實際上是編織的。

調試器不起作用的原因是因為沒有調用類,它是Spring創建的代理。 是的Spring廣泛使用反射。

我曾經嘗試將Aspects放在JAX-RS類上,但它失敗了,因為Spring創建的代理沒有被JAX-RS資源考慮在內,並且建議沒有被解雇。

我也使用了外卡,然后在任何異常的任何堆棧跟蹤中,我可以在堆棧跟蹤中的某處看到Spring代理調用。

PS它更多的是觀察而不是知識。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM