Spring知識點總結

周江霄發表於2015-06-29

    在學習Spring之前,先了解Spring是什麼。百度百科上解釋:Spring是分層的JavaSE/EE full-stack輕量級開源框架,以IoC(Inverse of Control 反轉控制)和AOP(Aspect Oriented Programming 面向切面程式設計為核心)。這裡涉及到兩個關鍵詞,那就是Ioc和AOP,弄明白這兩個知識點,Spring的核心也就掌握了一大半了。


    一、IoC


    所謂IoC就是inverse of control 控制反轉,將物件的建立權(例項化) 交予spring框架建立過程。當應用了IoC,一個物件依賴的其它物件會通過被動的方式傳遞進來,而不是這個物件自己建立或者查詢依賴物件。

    舉例,我們在學習三層的時候都知道Service層的類要呼叫Dao的方法,必須在Service類中新增對Dao的引用,才能呼叫Dao的方法,下面我們就一起來回顧一下我們的引用方式:


    1.使用new

        

StudentDao stuDao = new StudentDao();

    2.使用介面

        

StudentDao stuDao = new UserDaoImpl();

    3.使用工廠

        

StudentDao stuDao = BeanFactory.getBean();


    以上幾種,都是我們以前學習過的。其中前兩種我們知道,Service層和Dao的依賴比較嚴重,為了使Service和Dao之間進行解耦,我們引入了工廠。但是使用工廠也有相應的弊端:


    1.工廠類依舊需要去了解具體的實現類以及其引數,當程式複雜度到一定程度時,工廠類依舊可能很複雜。

    2.還是必須要有原始碼才能更新工廠類的程式碼,才能重新編譯。

    基於以上原因,我們引入了Spring IoC.

    Spring IoC通過配置檔案配置:

    在配置檔案中配置實體的Id和對應的實現類,然後通過API讀取:

    

<bean id="userDao" class="cn.tgb.dao.impl.UserDaoImpl">

    

UserDao userDao = BeanFactory.getBean("userDao");


    這樣寫的優點在於,不需要程式碼書寫工廠類了,只是一個簡單的XML配置檔案,就搞定了,因此,將新類註冊到整個程式時,也就不需要原始碼、編譯之類的,如果沒有特殊情況,只要編譯實現類就行了。


    二、AOP

    

    AOP為Aspect Oriented Programming的縮寫,意為:面向切面程式設計,通過預編譯方式和執行期動態代理實現程式功能的統一維護的一種技術。AOP採取橫向抽取機制,取代了傳統縱向繼承體系重複性程式碼,使用springAOP完成功能:效能監控、事務管理、日誌記錄、快取等.


    AOP的相關術語如下:

    

    1.Target:目標物件,被代理物件。例如:UserService

    2.JoinPoint 連線點,目標物件中被代理的方法(掉)。例如:saveUser()/updateUser/deleteUser/findUser

    3.PointCut 切入點,實際上被代理的方法,及實際上的連線點。例如:saveUser

       切入點是連線點子集

    4.Advice 通知/增強,在切入點前或後執行的方法。例如:before、after

          分類:前置通知、後置通知,環繞通知等,通知是對方法進行增強。

    5.Introduction,引介,特殊的通知。對類直接增強。給類新增方法,修改不要方法等。 

    6.Weaving ,織入:將通知 引用 到 目標物件上 過程。及將通知與切入點關聯過程。

    7.Proxy,代理,目標物件Target生成代理物件,於是就可以程式碼增強了。

    用一張圖來總結他們的關係: 

                                                                                                         圖1 AOP 術語之間的關係


    AOP並沒有幫助我們解決任何新的問題,它只是提供了一種更好的辦法,能夠用更少的工作量來解決現有的一些問題,並且使得系統更加健壯,可維護性更好。同時,它讓我們在進行系統架構和模組設計的時候多了新的選擇和新的思路。