Java 聊聊Spring框架AOP和IoC

Spring框架

Spring 框架是當前主流的 Java 應用程序開發框架。Spring使Java編程對每個人來說都更快、更簡單、更安全。Spring對速度、簡單性和生產力的關注使它成爲世界上最流行的Java框架。

spring 的優點?

  1. 降低了組件之間的耦合性 ,實現了軟件各層之間的解耦 
  2. 可以使用容易提供的衆多服務,如事務管理,消息服務等 
  3. 容器提供單例模式支持 
  4. 容器提供了AOP技術,利用它很容易實現如權限攔截,運行期監控等功能 
  5. 容器提供了衆多的輔助類,能加快應用的開發 
  6. spring對於主流的應用框架提供了集成支持,如hibernate,JPA,Struts等 
  7. spring屬於低侵入式設計,代碼的污染極低 
  8. 獨立於各種應用服務器 
  9. spring的DI機制降低了業務對象替換的複雜性 
  10. Spring的高度開放性,並不強制應用完全依賴於Spring,開發者可以自由選擇spring的部分或全部 
  11. Spring提供了一致的事務管理接口,可向下擴展到(使用一個單一的數據庫,例如)本地事務並擴展到全局事務(例如,使用 JTA)。

AOP

與OOP ( Object Oriented Programming面向對象)對比,傳統的OOP開發中的代碼邏輯是自上而下在這些之上而下的過程中會產生寫橫切性的問題。而這些橫切性的問題又與我們主業務邏輯關係不大。會散落在代碼的各個地方,造成難以維護。

AOP的編程思想就是把這些橫切性的問題和主業務邏輯進行分離,從而起到解耦的目的。

基本要素

  1. Aspect(切面)通常是個類,裏面可以定義切入點和通知

  2. JointPoint(連接點):程序執行過程中明確的點,一般是方法的調用

  3. Advice(通知):AOP在特定的切入點上執行的增強處理, Before After AfterReturning AfterThrowing Around

  4. Pointcut(切入點):就是帶有通知的連接點,在程序中主要體現爲書 寫切入點表達式

  5. AOP代理: AOP框架創建的對象,代理就是目標對象的加強。

底層原理

  1. Java 動態代理

  2. CGLIB 代理

代理對象是接口的時候使用的是Java 動態代理,否則的話使用的是CGLIB

源碼分析

IoC

loC(Inversion of Control)也稱爲依賴注入(dependency injection, DI)。它是一個對象定義依賴關係的過程,也就是說,對象只通過構造函數參數、工廠方法的參數或對象實例構造或從工廠方法返回後在對象實例上設置的屬性來定義它們所使用的其他對象。然後容器在創建bean時注入這些依賴項。這個過程本質上是bean本身的逆過程,因此稱爲控制反轉(IoC,通過直接構造來控制其依賴項的實例化。

DI(Dependency Injection) — IOC 的一種實現手段:即組件以一些預先定義好的方式(例如: setter 方法)接受來自如容器的資源注入. 相對於 IOC 而言,這種表述更直接(容器向組件注入資源,方式有:屬性注入、構造器注入)

依賴注入的方式

  1. Autowired/resource 等等 (可以再屬性、構造器、sertter上標註)

  2. setter方法注入(xml中的利用property標籤,實際是調用sertter方法)

  3. 構造器注入

  4. 靜態/實例工廠(只找到xml裏面的用法)

Spring提供兩種容器

序號 容器 & 描述
1 Spring BeanFactory 容器它是最簡單的容器,給 DI 提供了基本的支持,它用 org.springframework.beans.factory.BeanFactory 接口來定義。BeanFactory 或者相關的接口,如 BeanFactoryAware,InitializingBean,DisposableBean,在 Spring 中仍然存在具有大量的與 Spring 整合的第三方框架的反向兼容性的目的。
2 Spring ApplicationContext 容器該容器添加了更多的企業特定的功能,例如從一個屬性文件中解析文本信息的能力,發佈應用程序事件給感興趣的事件監聽器的能力。該容器是由 org.springframework.context.ApplicationContext 接口定義。

 參考:w3cschool.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章