利用反射手寫代碼實現spring AOP

前言:上一篇博客本身動手編寫spring IOC源碼受到了你們的熱情關注,在這裏博客十分感謝。特別是給博主留言建議的@瑪麗的竹子等等。本篇博客咱們繼續,仍是在原有的基礎上進行改造。下面請先欣賞一下博主畫的一張aop簡圖(沒有藝術天分,畫的很差莫見怪)html

解析:每每在咱們的系統的多個核心流程中會有一部分與之關係不大的相同的橫切流程,例如權限認證,事務管理。所以咱們通常會抽象出這些相同的比較次要的交給spring aop的Handler來統一處理這些橫切流程也就是上圖中綠色部分。接下來咱們看一下本例結構圖:spring

解析:1,咱們的Hostess對象是Master接口的實現,主要實現了WalkDog()和shopping()兩個方法,而WalkDog()方法則是調用的是Dog接口的實現類的bark()方法。app

2,咱們整個程序的入口Client調用的Hostess對象的兩個核心方法,HumanHandler處理的Hostess對象的橫切流程。框架

複製代碼
 1 public class Client {
 2 
 3     public static void main(String[] args) {
 4         ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); 
 5         
 6         Master master = (Master)context.getBean("humanProxy");
 7         
 8         System.out.println("");
 9         System.out.println("");
10         System.out.println("");
11         System.out.println("");
12         
13         master.shopping();
14         master.WalkDog();
15         
16     }
17 }
複製代碼
複製代碼
 1 package human;
 2 
 3 import dog.Dog;
 4 
 5 public class Hostess implements Master {
 6     
 7     private Dog dog;
 8     
 9     public void setDog(Dog dog) {
10         this.dog = dog;
11     }
12     
13     @Override
14     public void WalkDog() {
15 
16         dog.bark();
17     }
18     
19     @Override
20     public void shopping(){
21         System.out.println("瘋狂購物中");
22     }
23 
24 }
複製代碼

解析:經過以上代碼咱們不難發現咱們的程序只是調用核心業務,而每每核心業務的周圍有不少繁瑣的相對於比較次要的橫切業務。利用本例中遛狗,購物以前,咱們須要再家作一些前提準備。例如:整理一下着裝,鎖上房門等等,回家以後有須要換鞋之類的。所以咱們還須要一個handler來處理這些業務。ide

 View Code

解析:有了handler咱們還須要一個代理工廠學習

 View Code

接下來咱們來看一下本例的具體配置this

 View Code

最後一步也是關鍵,本類中使用到的實例須要咱們經過讀取上面這份配置文件而後經過反射構造出來。代理

 View Code

下面是運行結果xml

總結:1 spring aop將咱們的系統分爲兩部分,一核心業務,二橫切業務。咱們的只需關注核心業務,橫切業務統一交給代理去處理。htm

2 本例依舊是利用反射調用橫切方法實現aop,仍是那句話,咱們本身寫的天然是漏洞百出,只是爲了說明問題。做爲一個開源的框架,若是對spring源碼感興趣的朋友能夠自行查看。

另:博主的我的博客也在努力搭建中,歡迎與各位學習交流,謝謝!我的博客地址:http://www.singletonh.top/

相關文章
相關標籤/搜索