Spring框架之我見(三)——IOC、AOP

聊完了Spring框架中最重要的兩種設計模式,咱們來看一下Spring框架的模塊和結構圖。

Spring框架的結構

下圖是Spring官方給出的Spring框架的結構圖。spring

Spring框架

從圖中咱們能夠看到Spring的四大部分:核心容器(container)、AOP模塊、Web模塊、Data模塊。編程

  • 首先看核心容器,從核心倆字咱們能夠看出,這是Spring最重要的部分。主要的功能是實現了控制反轉(IOC)與依賴注入(DI)、Bean配置、加載以及生命週期的管理。
  • AOP模塊:負責Spring的全部AOP(面向切面)的功能。
  • Web模塊:擴展了Spring的Web功能。使其符合MVC的設計規範,最重要的是提供了Spring MVC的容器。
  • Data模塊:提供了一些數據相關的組件:包括JDBC、orm(對象關係映射)、事務操做、oxm(對象xml映射)、Jms(Java消息服務)。

咱們能夠看到Spring給咱們提供的模塊至關的豐富,不管是持久層業務層仍是控制層都有所涉及。設計模式

  1. Spring幾乎包攬除了業務邏輯以外的的全部工做,包括日誌管理、事務管理、Bean管理、安全管理等。
  2. Spring致力於全套的Java問題的解決方案,在全部的Java能夠涉足的領域,Spring都會提供相應的支持。(即便沒有支持,也會讓咱們去整合)
  3. 與第三方框架的整合。在個人理解中Spring框架就像一個插線板,而第三方框架就至關於插頭,能夠輕易地與它組合在一塊兒。須要的時候就插上去,不須要的時候就拔掉,至關的方便。

既然Spring如此的方便,那麼它又是如何作到的呢?緩存

很簡單,經過兩點:安全

  • 控制反轉(IOC)
  • 面向切面編程(AOP)

控制反轉(IOC)/依賴注入(DI)

既然說到控制反轉,那麼咱們不由要問什麼控制被反轉了?
答案是:咱們對對象的控制權被反轉了。咱們將對象的控制交給了Spring的容器框架

那麼問題又來了,什麼是Spring的容器?
簡單的說,Spring容器就是一個超級大工廠,負責建立、管理全部的Java對象,這些Java對象被稱爲Bean。Spring容器管理着容器中Bean之間的依賴關係,Spring使用一種被稱爲「依賴注入」的方式來管理Bean之間的依賴關係。編碼

什麼又是依賴注入呢?
依賴注入(DI)就是控制反轉的一種實現形式,Spring容器也是經過這種形式管理Bean的。spa

Spring容器如何作到替你管理這些bean的呢?
工廠模式。設計

Spring框架費了九牛二虎之力建立一個Spring容器去幫咱們管理這些Bean又有什麼好處呢?
其實和工廠模式的好處差很少:代理

  • 解除硬編碼耦合,利於項目升級和維護;
  • 簡化了對象的管理,使咱們更加專一於業務操做;

聊完了控制反轉咱們再來看看Spring框架的另外一項關鍵技術AOP。

面向切面編程(AOP)

什麼是面向切面編程?

面向切面編程:在運行時,動態地將代碼切入到類的指定方法、指定位置上的編程思想就是面向切面的編程。

這句話讀完估計跟沒讀沒什麼區別,仍是沒懂。下面咱們來看一張圖:

spring-aop

從圖中咱們能夠看出:咱們每寫一個業務功能,都須要判斷權限、記錄日誌、提交事務、這些邏輯是否是都是重複的呀,這至關於什麼呢?至關於咱們前面說的髒活累活,這都不是咱們的重點,咱們的重點是業務邏輯,就是說咱們須要把總體框架搭好,實際編寫的時候只須要將咱們的業務代碼切入到框架之中,就好了。

原理:代理模式。

爲何須要AOP?
AOP專門用於處理系統中分佈於各個模塊或者不一樣方法中的交叉關注點的問題。好比:在程序中,咱們經常須要處理一些具備橫切性質的系統級服務,如事務管理、安全檢查、緩存、對象池管理等,AOP是一種很是經常使用的解決方案。

面向切面編程對咱們來講有什麼好處?

  1. 減小重複;
  2. 專一業務;

注意:面向切面編程只是面向對象編程的一種補充。

講了這麼多咱們來對Spring框架作一個總結。

Spring 總結

  1. Bean的統一管理,下降了對象之間的耦合
  2. 對主流的框架提供了很好的集成支持
  3. 提供衆多組件,事務管理,JDBC等
  4. 具備高度可開放性,開發者能夠自由選擇Spring部分或所有
  5. 主要使用工廠模式和代理模式。
  6. 低侵入,代碼污染極低。(咱們不會由於用了spring而影響咱們的正常的業務邏輯)
  7. AOP的很好支持,方便麪向切面編程(AspectJ)。

下一節,咱們將討論Spring框架在WEB開發的應用Spring MVC。

相關文章
相關標籤/搜索