Spring原理理解

Spring 

Spring是一個開源的容器框架,可以管理Web層,業務層,Dao層,持久層組件,可以配置各個層的組件維護各層之間的關係。

主要負責創建Bean以及維護Bean之間的關係

Spring框架核心/核心原理

一、IOC:(Inversion of control): 控制反轉

 概念:一個類在獲取它所需要的依賴類的對象時,依賴對像創建的控制權由這個類轉向容器,由Spring容器根據配置文件去提供實例。       

核心:bean工廠;在Spring中,bean工廠創建的各個實例稱作bean 

 

理解:

    一般一個類實現一個複雜的功能,需要依賴其他類或多個類協助纔行。每個對象在需要獲取依賴類對象的時候
需要使用像new object() 來獲取,但是這樣耦合度太高。
    而IOC的思想是:Spring容器來實現這些相互依賴對象的創建、協調工作。對象只需要關係業務邏輯本身就可以了。從這方面來說,對象如何得到他的協作對象的責任被反轉了(IOC、DI)。



其中類A中,可能就需要類B、類C中的方法。爲了能調用別的類的方法,首先得取得這個類的實例,即在類A中new一個類B、再new一個類C,也就是說調用者負責創建被調用者的實例。試想想下面這兩種情形:

1. 若類A中還需要其他很多類協助; 
2. 類B、類C還需要協助很多其他類處理業務。

如此一來,會造成類A中越來越臃腫,越來越不好管理;類B、類C需要不斷的創建。 
而採用Spring框架後,就不用這麼麻煩了。創建類A、類B、類C的實例以及維護類A和類B、類C之間關係的責任就交給了Spring,它負責這些工作。也就是說本來是類A控制這些實例的創建,現在交由Spring框架了,所以控制反轉(IOC)了。

 

 

DI(Dependency Injection依賴注入),我的理解是,DI是IOC的實現方式。

     依賴注入的方式有三種:

             setter方法,

             構造器方法,

             註解AutoWired方式

 

二、AOP(Aspect-Oriented Programming): 面向方面編程 

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

     程序在執行具體業務邏輯前、後,在不修改原有代碼的情況下,加入一些擴展的功能,如:日誌,事務等。實現了極大程度解耦、方便擴展。

       一般這些擴展的功能和具體的業務邏輯並沒有直接的關係。將業務和非業務的分開,極大程度解耦。

理解:
    在業務代碼執行前後,在很多地方都需要加入這些額外的元素,但是這些方面和具體的業務邏輯並沒有直接的關係。於是乎,就將這些額外的元素抽出來,加以封裝,
在特定的位置橫切到方法的業務邏輯前後等位置。將業務和非業務的分開,極大程度解耦。

 

a.靜態代理

      根據每個具體類分別編寫代理類

      根據一個接口編寫一個代理類

b.動態代理

      針對一個方面編寫一個InvocationHandler,然後借用JDK反射包中的Proxy類爲各種接口動態生成相應的代理類

 

附:

Spring框架包括7大模塊(以下是爲了內容完整引用部分)

 

◆核心容器:核心容器提供 Spring框架的基本功能。核心容器的主要組件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉 (IOC) 模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開。

◆Spring 上下文:Spring 上下文是一個配置文件,向 Spring框架提供上下文信息。Spring 上下文包括企業服務,例如 JNDI、EJB、電子郵件、國際化、校驗和調度功能。

◆Spring AOP:通過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring框架中。所以,可以很容易地使 Spring框架管理的任何對象支持 AOP。Spring AOP 模塊爲基於 Spring 的應用程序中的對象提供了事務管理服務。通過使用 Spring AOP,不用依賴 EJB 組件,就可以將聲明性事務管理集成到應用程序中。

◆Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,並且極大地降低了需要編寫的異常代碼數量(例如打開和關閉連接)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結構。

◆Spring ORM:Spring框架插入了若干個 ORM 框架,從而提供了 ORM 的對象關係工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構。

◆Spring Web 模塊:Web 上下文模塊建立在應用程序上下文模塊之上,爲基於 Web 的應用程序提供了上下文。所以,Spring框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工作。

◆Spring MVC 框架:MVC 框架是一個全功能的構建 Web 應用程序的 MVC 實現。通過策略接口,MVC 框架變成爲高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、Velocity、Tiles、iText 和 POI。
 

參考:

    簡潔:

    https://blog.csdn.net/qq_42394062/article/details/80844404

    https://blog.csdn.net/kingyxfly/article/details/79826333

    https://www.cnblogs.com/sunxun/p/6552911.html(瞬間看明白IOC)

    詳細:

    https://www.cnblogs.com/zhoudi/p/5820513.html   

    https://blog.51cto.com/13754022/2136801

    https://www.cnblogs.com/shijiaoyun/p/7458341.html

    https://cloud.tencent.com/developer/article/1350651

    https://blog.csdn.net/qq_35661171/article/details/80898110

 

  Spring架構和設計原理實現  

  https://www.iteye.com/blogs/subjects/Spring_jiwenke

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