天天看點

【架構】[Spring]AOP攔截-三種方式實作自動代理用Spring一個自動代理類DefaultAdvisorAutoProxyCreator:自己寫一個自動代理底層實作:使用aop标簽配自動代理

這裡的自動代理,我講的是自動代理bean對象,其實就是在xml中讓我們不用配置代理工廠,也就是不用配置class為org.springframework.aop.framework.ProxyFactoryBean的bean。

總結了一下自己目前所學的知識。

發現有三種方式實作自動代理

例如:

原來不用自動代理的配置檔案如下:

現在改用自動代理,如下配置:

相對于前面,也就是把代理工廠部分換成自動代理了。

【架構】[Spring]AOP攔截-三種方式實作自動代理用Spring一個自動代理類DefaultAdvisorAutoProxyCreator:自己寫一個自動代理底層實作:使用aop标簽配自動代理

我們也可以寫一個類,來實作DefaultAdvisorAutoProxyCreator自動代理的功能!

首先,我們需要實作一個接口,也就是BeanPostProcessor接口。

BeanPostProcessor接口作用是:如果我們需要在Spring容器完成Bean的執行個體化、配置和其他的初始化前後添加一些自己的邏輯處理,我們就可以定義一個或者多個BeanPostProcessor接口的實作,然後注冊到容器中。

而我們想要在原型對象bean被建立之後就代理了,就必須在原來的容器中拿到原來的原型對象,需要拿到原來spring容器中的切面對象,這個時候,我們就需要原來的容器,這個時候就需要另一個接口,也就是ApplicationContextAware接口!

通過這2個接口,我們就可以實作自動代理了。

測試結果就不上圖了,和前面是一樣的。

其實很多時候,我們如果自己去練一下底層,對上層的架構更好了解。

還有一種方法。

需要在beans加一個命名空間

還需要配xsi:schemaLocation,為aop加一個網絡位址。

我們需要一個aspectjweaver-jar包:

下載下傳位址:

<a href="http://mvnrepository.com/artifact/org.aspectj">http://mvnrepository.com/artifact/org.aspectj</a>

【架構】[Spring]AOP攔截-三種方式實作自動代理用Spring一個自動代理類DefaultAdvisorAutoProxyCreator:自己寫一個自動代理底層實作:使用aop标簽配自動代理

個人覺得能學會使用一種就OK了,不用全部記下來,為了學習,都了解一下就好,别人寫出來,能看懂就好。

哈哈,其實底層學好了,自己寫的時候,就算不會用Spring的自動代理,自己寫出來底層也是蠻好的嘛