Spring特點與工作原理


根據多個參考資料,總結如下:

Spring的概念

  Spring是一種多層的J2EE應用程序框架,其核心就是提供一種新的機制管理業務對象及其依賴關系。它是一種容器框架,用於創建bean,維護bean之間的關系,它可以管理web層,持久層,業務層等,可以配置各個層的組件並且維護各個層的關系

Spring特點

  (1)輕量級:輕量級是針對重量級容器(EJB)來說的,Spring的核心包就不到1M大小,而使用Spring的核心包所需的資源也很小,所以可以在小型設備中使用。  

  (2)非入侵式:Spring目標是一個非入侵式的服務框架。原因是所有框架都是提供大量的功能供用戶去使用,從而簡化開發時間和成本,但由於大量的使用了框架的API,使應用程序和框架發生了大量的依賴性,無法從框架中獨立出來,更加無法使程序組件在其他程序中使用。

  (3)容器:Spring提供了容器功能,容器可以管理對象的生命周期、對象與對象間的關系、我們可以通過編寫XML來設置對象關系和初始值,這樣容器在啟動之后,所有的對象都直接可以使用,不用編寫任何編碼來產生對象。Spring有兩種不同的容器:Bean工廠以及應用上下文

Spring工作原理

  Spring內部最核心的就是IOC了,動態注入,讓一個對象的創建不用new了,可以自動的生產,這其實就是利用java里的反射,反射其實就是在運行時動態的去創建、調用對象,Spring就是在運行時,跟xml Spring的配置文件來動態的創建對象和調用對象里的方法的 。

  Spring還有一個核心就是AOP面向切面編程,可以為某一類對象進行監督和控制(也就是在調用這類對象的具體方法的前后去調用你指定的模塊)從而達到對一個模塊擴充的功能。這些都是通過配置類達到的。

  Spring目的:就是讓對象與對象(模塊與模塊)之間的關系沒有通過代碼來關聯,都是通過配置類說明管理的(Spring根據這些配置 內部通過反射去動態的組裝對象)  

     要記住:Spring是一個容器,凡是在容器里的對象才會有Spring所提供的這些服務和功能。  

     Spring里用的最經典的一個設計模式就是:模板方法模式。      

spring 的2個核心技術:

ioc/di:控制反轉/依賴注入

  【內部最核心的就是IOC了,動態注入,讓一個對象的創建不用new了,可以自動的生產,這其實就是利用java里的反射,反射其實就是在運行時動態的去創建、調用對象,Spring就是在運行時,跟xml Spring的配置文件來動態的創建對象,和調用對象里的方法的 。】

  所謂IoC(控制反轉),對於spring框架來說,就是由spring來負責控制對象的生命周期對象間的關系

  IoC的一個重點(DI 依賴注入)是在系統運行中,動態的向某個對象提供它所需要的其他對象(因此又叫DI)。如對象A定義一個引用B(對象),至於這個B對象怎么構造,何時構造,A不需要知道。在系統運行時,spring會在適當的時候制造一個B對象,然后像打針一樣,注射到A當中,這樣就完成了對各個對象之間關系的控制。A需要依賴B才能正常運行,而這個B是由spring注入到A中的,依賴注入的名字就這么來的。DI原理:Java 1.3之后一個重要特征是反射(reflection),它允許程序在運行的時候動態的生成對象、執行對象的方法、改變對象的屬性,spring就是通過反射來實現注入的

  沒有spring時:在一個對象中,如果要使用另外的對象,就必須得到它(自己new一個,或者從JNDI中查詢一個),使用完之后還要將對象銷毀(比如Connection等),對象始終會和其他的接口或類藕合起來。

  有spring時:所有的類都會在spring容器中登記,告訴spring你是個什么東西,你需要什么東西,然后spring會在系統運行到適當的時候,把你要的東西主動給你,同時也把你交給其他需要你的東西。所有的類的創建、銷毀都由 spring來控制,也就是說控制對象生存周期的不再是引用它的對象,而是spring。對於某個具體的對象而言,以前是它控制其他對象,現在是所有對象都被spring控制,所以這叫控制反轉。

aop:面向切面:

  AOP(Aspect-OrientedProgramming,面向方面編程),可以說是OOP(Object-Oriented Programing,面向對象編程)的補充和完善

  AOP的核心思想就是“將應用程序中的商業邏輯同對其提供支持的通用服務進行分離。”

  AOP把軟件系統分為兩個部分:核心關注點橫切關注點。業務處理的主要流程是核心關注點,與之關系不大的部分是橫切關注點。橫切關注點的一個特點是,他們經常伴隨在核心關注點前后使用,而各處都基本相似。比如權限認證、日志、事務處理。

  AOP技術,利用一種稱為“橫切”的技術,剖解開封裝的對象內部,並將那些影響了多個類的公共行為封裝到一個可重用模塊,並將其名為“Aspect”,簡單地說,就是將那些與業務無關,卻為業務模塊所共同調用的邏輯或責任封裝起來,便於減少系統的重復代碼,降低模塊間的耦合度,並有利於未來的可操作性和可維護性。實現AOP的技術,主要分為兩大類:一是采用動態代理技術,利用截取消息的方式,對該消息進行裝飾,以取代原有對象行為的執行;二是采用靜態織入的方式,引入特定的語法創建“方面”,從而使得編譯器可以在編譯期間織入有關“方面”的代碼。Spring采用動態代理織入,而AspectJ采用編譯器織入和類裝載期織入。

  Spring AOP使用了兩種動態代理機制:一種是基於JDK的動態代理,一種是基於CGLib的動態代理。JDK1.3以后,java提供了動態代理技術,允許開發者在運行期間動態的創建接口的代理實例,JDK的動態代理主要涉及到java.lang.reflect包中的兩個類:Proxy和InvocationHandler。CGLib采用非常底層的字節碼技術,可以為一個類創建子類,並在子類中采用方法攔截的結束攔截所有父類方法的調用,並順勢織入橫切邏輯。

spring的基本用法:

1、關於spring容器:
  spring容器是Spring的核心,該容器負責管理spring中的java組件,
  ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");//這種方式實例化容器,容器會自動預初始化所有Bean實例
  ctx.getBean("beanName");
  ApplicationContext 實例正是Spring容器。
  ApplicationContext容器默認會實例化所有的singleton Bean
  Spring容器並不強制要求被管理組件是標准的javabean。

2、Spring的核心機制:依賴注入。
  不管是依賴注入(Dependency Injection)還是控制反轉(Inversion of Conctrol),其含義完全相同:
  當某個java實例(調用者)需要調用另一個java實例(被調用者)時,傳統情況下,通過調用者來創建被調用者的實例,通常通過new來創建,
  而在依賴注入的模式下創建被調用者的工作不再由調用者來完成,因此稱之為"控制反轉";創建被調用者實例的工作通常由Spring來完成,然后注入調用者,所以也稱之為"依賴注入"。

3、依賴注入一般有兩種方式:
  設置注入:IoC容器使用屬性的setter方式注入被依賴的實例。<property name="" ref="">
  構造注入:IoC容器使用構造器來注入被依賴的實例。<constructor-arg ref="">
  配置構造注入的時候<constructor-arg>可以配置index屬性,用於指定該構造參數值作為第幾個構造參數值。下標從0開始。

 

參考(很全面):https://blog.csdn.net/y13530828499/article/details/6648155


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM