原文:/question
Spring是壹個十分龐大的體系,具體可以訪問它的官網https://spring.io/projects進行詳細了解。
首先,回答這個問題,可以先介紹壹下Spring體系中的幾個項目:
SpringFramework
SpringData
SpringSecurity
SpringBoot
SpringCloud
當然,除了這些之外,Spring還包括很多其他的項目。
接著,著重介紹SpringFramework這個項目,它是壹個開源的Java/JavaEE全功能棧的應用程序,SpringFramework提供了壹個簡易的開發方式,這種開發方式可以避免使用那些可能致使底層代碼變得繁雜混亂的大量的屬性文件和幫助類。
Spring的這種低侵入式設計使代碼的汙染極低。
SpringFramework包括以下部分:
然後,我們再介紹壹下Spring的核心概念:
Bean管理
依賴註入(DI),又稱為控制反轉(IOC)
面向切面編程(AOP)
①Bean管理
與傳統的應用程序不同,在Spring中將對象的創建交給Spring容器來管理,也就是說只有放入Spring容器中的類,Spring才能對其產生作用。那麽Spring究竟是怎樣獲取類的對象的呢?
要想知道這個,我們首先要弄清楚這幾點:
BeanFactory是Spring容器的根接口,ApplicationContext是它的子接口,通常用它的子接口ApplicationContext來訪問Spring容器。
ApplicationContext子接口常用的有四個實現類:
ClassPathXmlApplicationContext 從 classpath 加載 spring 的配置文件
FileSystemApplicationContext 從系統文件加載 spring 的配置文件
AnnotationConfigApplicationContext 獲取基於註解的 spring 容器對象
XmlWebApplicationContext 在 web 環境中獲取 spring 容器對象
Spring通過BeanFactory來獲取這些類的對象,在配置文件中通過<bean/>節點將類交給Spring進行管理,ApplicationContext的實現類通過getBean()方法從Spring容器中獲取對象,默認為單例的。
②依賴註入
它可以降低類之間的耦合性,有兩種註入方式:
set註入,在配置文件中使用<property>節點
set註入
·?構造方法註入,在配置文件中使用<constructor-arg>節點
構造方法註入
下面舉個例子來說明壹下什麽是依賴註入:
假設類A因功能F需要調用類B,傳統的程序中,我們就會去new壹個類B的對象,因而類A就會依賴類於類B,這就是說如果類B不存在,則類A也就無法使用。而使用依賴註入以後,類A只需要去調用實現功能F接口的壹個實現類,這個實現類可能是類B,C等等,具體調用誰是有Spring的配置文件決定的,這樣類A就不再依賴於類B。
我們可以這樣理解控制反轉:
資源不是由使用資源的雙方進行管理,而是由不使用資源的第三方(即Spring容器)進行管理,這樣做的好處是:
資源集中管理,實現資源的可配置與易管理
降低使用資源雙方的依賴程度
在傳統程序中,當某個角色需要另外壹個角色協助時,由調用者來創建被調用者的實例。而在Spring中,創建被調用者的的工作不再由調用者來完成,而由第三方Spring容器來完成,所以稱為控制反轉,Spring容器創建被調用者的實例,然後註入調用者,所以又稱為依賴註入。
③面向切面編程
AOP在Spring中主要表現在兩個方面:
提供聲明式事務管理
Spring支持用戶自定義切面
面向切面編程是對面向對象編程(OOP)的補充。面向對象編程將程序分解成為各個層次的對象,面向切面編程將程序運行過程分解成各個切面。面向切面編程基於動態代理實現,降低了類直接的耦合程度。Spring的事務管理就是基於AOP實現的。
免費資源教程