spring aop中targetSource的理解


  TargetSource(目標源)是被代理的target(目標對象)實例的來源。TargetSource被用於獲取當前MethodInvocation(方法調用)所需要的target(目標對象),這個target通過反射的方式被調用(如:method.invode(target,args))。換句話說,proxy(代理對象)代理的不是target,而是TargetSource,這點非常重要!!!

        那么問題來了:為什么SpringAOP代理不直接代理target,而需要通過代理TargetSource(target的來源,其內部持有target),間接代理target呢?

        通常情況下,一個proxy(代理對象)只能代理一個target,每次方法調用的目標也是唯一固定的target。但是,如果讓proxy代理TargetSource,可以使得每次方法調用的target實例都不同(當然也可以相同,這取決於TargetSource實現)。這種機制使得方法調用變得靈活,可以擴展出很多高級功能,如:target pool(目標對象池)、hot swap(運行時目標對象熱替換),等等。

  TargetSource組件本身與SpringIoC容器無關,換句話說,target的生命周期不一定是受spring容器管理的,我們以往的XML中的AOP配置,只是對受容器管理的bean而言的,我們當然可以手動創建一個target,同時使用Spring的AOP框架(而不使用IoC容器)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM