async异步注解和aspect切面注解等注解的原理
在我們使用spring框架的過程中,在很多時候我們會使用@async注解來異步執行某一些方法,提高系統的執行效率。今天我們來探討下spring是如何完成這個功能的。
1、spring 在掃描bean的時候會掃描方法上是否包含@async的注解,如果包含的,spring會為這個bean動態的生成一個子類,我們稱之為代理類(?)。
2、代理類是繼承我們所寫的bean的,然后把代理類注入進來,在執行此方法時會到代理類中,代理類判斷此方法需要異步執行,就不會調用父類 (我們原本寫的bean)的對應方法。
3、spring自己維護了一個隊列,他會把需要執行的方法,放入隊列中,等待線程池去讀取這個隊列,完成方法的執行, 從而完成了異步的功能。
因為這種實現方法,在同一個類中的方法調用,添加@async注解是失效的!原因是當你在同一個類中的時候,方法調用是在類體內執行的,spring無法截獲這個方法調用。
那在深入一步,spring為我們提供了AOP,面向切面的功能。他的原理和異步注解的原理是類似的:
spring在啟動容器的時候,會掃描切面所定義的類。在這些類被注入的時候,所注入的也是代理類,當你調用這些方法的時候,本質上是調用的代理類。
通過代理類再去執行父類相對應的方法,那spring只需要在調用之前和之后執行某段代碼就完成了AOP的實現了!
?
轉載于:https://www.cnblogs.com/xyhero/p/5ae19e694629d760b0ed59917f25f365.html
總結
以上是生活随笔為你收集整理的async异步注解和aspect切面注解等注解的原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 官方一步解决各种Windows更新问题
- 下一篇: 使用别名访问MSSQL Express