Spring核心原理


Spring是一個輕量級控制反轉(IOC)和面向切面(AOP)的容器框架

一、spring容器的主要核心:

 

1.IOC(Inversion of Control)控制反轉:

簡單地說,由spring來負責控制對象的生命周期和對象間的關系。傳統的Java SE程序設計,我們直接在對象內部通過new進行創建對象,是程序主動去創建依賴對象;而IOC是有專門一個容器來創建這些對象,即由Ioc容器來控制對象的創建;就是把new對象實例化的工作交給spring容器來完成,spring幫我們負責銷毀對象,控制對象的生命周期,在需要使用對象的時候直接向spring申請即可。控制對象生存周期的不再是引用它的對象,而是spring。對於某個具體的對象而言,以前是它控制其他對象,現在是所有對象都被spring控制,所以這叫控制反轉。

 

2.DI(Dependency Injection)依賴注入:

組件之間依賴關系由容器在運行期決定,由容器動態的將某個依賴關系注入到組件之中。在系統運行中,動態的向某個對象提供它所需要的其他對象。依賴注入的目的並非為軟件系統帶來更多功能,而是為了提升組件重用的頻率,並為系統搭建一個靈活、可擴展的平台。Java 1.3之后一個重要特征是反射(reflection),它允許程序在運行的時候動態的生成對象、執行對象的方法、改變對象的屬性,spring就是通過反射來實現注入的。.
注入方式:set方式注入、構造器注入、工廠方法注入,注解方式注入

set方式注入:目標對象中需要提供相關的set方法,需要調用set方法將資源傳遞給目標對象使用。

構造器注入:目標對象中提供帶參數的構造方法,通過構造方法將資源傳遞給目標對象使用。

靜態工廠注入:調用靜態工廠的方法來獲取自己需要的對象。

實例工廠注入:實例工廠的意思是獲取對象實例的方法不是靜態的,所以你需要首先new工廠類,再調用普通的實例方法

注解方式注入:Spring2.5之后,Spring增加了注解注入。@Autowired 注解,可以對Bean類成員變量、方法及構造函數進行標注,完成依賴注入的自動裝配工作。使用@Autowired可以省略Bean類的待依賴注入對象的set方法。@Resource注解的功能和@Autowired注解功能相近,@Resource有name和type兩個主要的屬性。Spring容器對於@Resource注解的name屬性解析為bean的名字,type屬性則解析為bean的類型。因此使用name屬性,則按byName模式的自動注入策略,如果使用type屬性則按 byType模式自動注入策略。如果兩個屬性都未指定,Spring容器將通過反射技術默認按byName模式注入。

 

注:在 Spring 中,構成應用程序主干並由Spring IoC容器管理的對象稱為bean。bean是一個由Spring IoC容器實例化、組裝和管理的對象。

 IOC/DI 底層是通過反射實現的,可以通過某個類的權限定名用 Class.forName(類的權限定名)獲取這個類的類對象,再通過這個類的類對象通過Clazz.getInstance()方法類創建一個bean實例。

3.AOP(Aspect-OrientedProgramming)面向切面:

縱向重復的代碼橫向抽取,使用過濾器 Filter

在面向對象編程(oop)思想中,我們將事物縱向抽成一個個的對象。而在面向切面編程
中,我們將一個個的對象某些類似的方面橫向抽成一個切面,對這個切面進行一些如權限控制、事物管理,記錄日志等公用操作處理的過程就是面向切面編程的思想。
注意:AOP 底層是動態代理,如果是接口采用 JDK 動態代理,如果是類 采用CGLIB 方式實現動態代理

二、Spring 能幫我們做什么?

  1. Spring 能幫我們根據配置文件創建及組裝對象之間的依賴關系。Spring 根據配置文件來進行創建及組裝對象間依賴關系,只需要改配置文件即可
  2. Spring 面向切面編程能幫助我們無耦合的實現日志記錄,性能統計,安全控制。Spring 面向切面編程能提供一種更好的方式來完成,一般通過配置方式,而且不需要在現有代碼中添加任何額外代碼,現有代碼專注業務邏輯。
  3. Spring 能非常簡單的幫我們管理數據庫事務。我們只需獲取連接,執行 SQL,其他事物相關的都交給 Spring 來管理了。
  4. Spring 還能與第三方數據庫訪問框架(如 Hibernate、 JPA)無縫集成,而且自己也提供了一套 JDBC訪問模板,來方便數據庫訪問。
  5. Spring 還能與第三方 Web(如 Struts、 JSF)框架無縫集成,而且自己也提供了一套 Spring MVC框架,來方便 web 層搭建。
  6. Spring 能方便的與 Java EE(如 Java Mail、任務調度)整合,與更多技術整合(比如緩存框架)。

 

————————————————
版權聲明:本文為CSDN博主「淺唱深愛」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_34955642/article/details/89068816


免責聲明!

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



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