Spring是一個(gè)十分龐大的體系擎厢,具體可以訪問它的官網(wǎng)https://spring.io/projects進(jìn)行詳細(xì)了解。
首先,回答這個(gè)問題篓像,可以先介紹一下Spring體系中的幾個(gè)項(xiàng)目:
- SpringFramework
- SpringData
- SpringSecurity
- SpringBoot
- SpringCloud
當(dāng)然,除了這些之外皿伺,Spring還包括很多其他的項(xiàng)目员辩。
接著,著重介紹SpringFramework這個(gè)項(xiàng)目鸵鸥,它是一個(gè)開源的Java/JavaEE全功能棧的應(yīng)用程序奠滑,SpringFramework提供了一個(gè)簡(jiǎn)易的開發(fā)方式,這種開發(fā)方式可以避免使用寫可能使底層代碼變得繁雜混亂的大量的屬性文件和不幫助類妒穴。
Spring的這種低侵入式設(shè)計(jì)使代碼的污染極低宋税。
SpringFramework包括以下部分:
SpringFramework體系.png
Data Access/Integration模塊:數(shù)據(jù)訪問/集成
Web模塊:提供了基本的Web開發(fā)的集成特性
AOP模塊:提供了面向方面的編程實(shí)現(xiàn),允許您定義多方攔截器和切入點(diǎn)讼油,以干凈解耦杰赛,實(shí)現(xiàn)的功能,應(yīng)該分開的代碼汁讼。
Aspects模塊:提供與AspectJ的集成這又是一個(gè)功能強(qiáng)大且成熟的面向方面編程(AOP)框架
instrumentation模塊:提供了一定的應(yīng)用服務(wù)器中使用類工具的支持和類加載器實(shí)現(xiàn)
messaging模塊:消息通知
Core Container模塊:核心容器
Test模塊:測(cè)試模塊支持Spring組件使用JUnit或TestNG框架的測(cè)試
然后淆攻,我們?cè)诮邮芤幌耂pirng的核心概念:
- Bean管理
- 依賴注入(dependency injection),又稱為控制反轉(zhuǎn)(inversion of control)
- 面向切面編程(AOP)
①Bean管理
與傳統(tǒng)的應(yīng)用程序不同,在Spring中將對(duì)象的創(chuàng)建交給Spring容器來管理嘿架,也就是說只有放入Spring容器中的類瓶珊,Spring才能對(duì)其產(chǎn)生作用。那么Spring究竟是怎樣獲取類的對(duì)象的呢耸彪?
要想知道這個(gè)伞芹,我們首先要弄清楚這幾點(diǎn):
BeanFactory
是Spring容器的根接口,ApplicationContext
是它的子接口蝉娜,通常用它的子接口ApplicationContext來訪問Spring容器唱较。ApplicationContext子接口常用的有四個(gè)實(shí)現(xiàn)類:
- ClassPathXmlApplicationContext 從 classpath 加載 spring 的配置文件
- FileSystemApplicationContext 從系統(tǒng)文件加載 spring 的配置文件
- AnnotationConfigApplicationContext 獲取基于注解的 spring 容器對(duì)象
- XmlWebApplicationContext 在 web 環(huán)境中獲取 spring 容器對(duì)象
Spring通過BeanFactory
來獲取這些類的對(duì)象,在配置文件中通過<bean/>節(jié)點(diǎn)將類交給Spring行管理召川,ApplicationContext的實(shí)現(xiàn)類通過getBean()方法從Spring容器中獲取對(duì)象南缓,認(rèn)為單例的。
②依賴注入
它可以降低類之間的耦合性荧呐,有兩種注入方式:
-
set注入汉形,在配置文件中使用<property>節(jié)點(diǎn)
set注入.jpg -
構(gòu)造方法注入纸镊,在配置文件中使用<constructor-arg>節(jié)點(diǎn)
構(gòu)造方法注入.png
下面舉個(gè)例子來說明一下什么是依賴注入:
假設(shè)類A因功能F需要調(diào)用類B,傳統(tǒng)的程序中概疆,我們就會(huì)去new一個(gè)類B的對(duì)象逗威,因而類A就會(huì)依賴類于類B,這就是說如果類B不存在岔冀,則類A也就無法使用凯旭。而使用依賴注入以后,類A只需要去調(diào)用實(shí)現(xiàn)功能F接口的一個(gè)實(shí)現(xiàn)類使套,這個(gè)實(shí)現(xiàn)類可能是類B,C等等罐呼,具體調(diào)用誰是由Spring的配置文件決定的,這樣類A就不再依賴于類B童漩。
我們可以這樣理解控制反轉(zhuǎn):
資源不是由使用資源的雙方進(jìn)行管理弄贿,而是由不使用資源的第三方(即Spring容器)進(jìn)行管理,這樣做的好處是: 資源集中管理矫膨,實(shí)現(xiàn)資源的可配置與易管理
降低使用資源雙方的依賴程度
在傳統(tǒng)程序中差凹,當(dāng)某個(gè)角色需要另外一個(gè)角色協(xié)助時(shí),由調(diào)用者來創(chuàng)建被調(diào)用者的實(shí)例侧馅。而在Spring中危尿,創(chuàng)建被調(diào)用者的的工作不再由調(diào)用者來完成,而由第三方Spring容器來完成馁痴,所以稱為控制反轉(zhuǎn)谊娇,Spring容器創(chuàng)建被調(diào)用者的實(shí)例,然后注入調(diào)用者罗晕,所以又稱為依賴注入济欢。`
③面向切面編程
AOP在Spring中主要表現(xiàn)在兩個(gè)方面:
- 提供聲明式事務(wù)管理
- Spring支持用戶自定義切面
面向切面編程是對(duì)面向?qū)ο缶幊蹋∣OP)的補(bǔ)充。面向?qū)ο缶幊虒⒊绦蚍纸獬蔀楦鱾€(gè)層次的對(duì)象小渊,面向切面編程將程序運(yùn)行過程分解成各個(gè)切面法褥。面向切面編程基于動(dòng)態(tài)代理實(shí)現(xiàn),降低了類直接的耦合程度酬屉。Spring的事務(wù)管理就是基于AOP實(shí)現(xiàn)的半等。