面試官:"說(shuō)說(shuō)你對(duì)Spring的理解"

Spring是一個(gè)十分龐大的體系,具體可以訪問(wèn)它的官網(wǎng)https://spring.io/projects進(jìn)行詳細(xì)了解。
首先,回答這個(gè)問(wèn)題,可以先介紹一下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ù)訪問(wèn)/集成
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容器來(lái)管理,也就是說(shuō)只有放入Spring容器中的類,Spring才能對(duì)其產(chǎn)生作用。那么Spring究竟是怎樣獲取類的對(duì)象的呢?
要想知道這個(gè),我們首先要弄清楚這幾點(diǎn):
BeanFactory是Spring容器的根接口,ApplicationContext是它的子接口,通常用它的子接口ApplicationContext來(lái)訪問(wèn)Spring容器。

ApplicationContext子接口常用的有四個(gè)實(shí)現(xiàn)類:
  • ClassPathXmlApplicationContext 從 classpath 加載 spring 的配置文件
  • FileSystemApplicationContext 從系統(tǒng)文件加載 spring 的配置文件
  • AnnotationConfigApplicationContext 獲取基于注解的 spring 容器對(duì)象
  • XmlWebApplicationContext 在 web 環(huán)境中獲取 spring 容器對(duì)象
    Spring通過(guò)BeanFactory來(lái)獲取這些類的對(duì)象,在配置文件中通過(guò)<bean/>節(jié)點(diǎn)將類交給Spring行管理,ApplicationContext的實(shí)現(xiàn)類通過(guò)getBean()方法從Spring容器中獲取對(duì)象,認(rèn)為單例的。
②依賴注入

它可以降低類之間的耦合性,有兩種注入方式:

  • set注入,在配置文件中使用<property>節(jié)點(diǎn)


    set注入.jpg
  • 構(gòu)造方法注入,在配置文件中使用<constructor-arg>節(jié)點(diǎn)


    構(gòu)造方法注入.png

    下面舉個(gè)例子來(lái)說(shuō)明一下什么是依賴注入:
    假設(shè)類A因功能F需要調(diào)用類B,傳統(tǒng)的程序中,我們就會(huì)去new一個(gè)類B的對(duì)象,因而類A就會(huì)依賴類于類B,這就是說(shuō)如果類B不存在,則類A也就無(wú)法使用。而使用依賴注入以后,類A只需要去調(diào)用實(shí)現(xiàn)功能F接口的一個(gè)實(shí)現(xiàn)類,這個(gè)實(shí)現(xiàn)類可能是類B,C等等,具體調(diào)用誰(shuí)是由Spring的配置文件決定的,這樣類A就不再依賴于類B。
    我們可以這樣理解控制反轉(zhuǎn):
    資源不是由使用資源的雙方進(jìn)行管理,而是由不使用資源的第三方(即Spring容器)進(jìn)行管理,這樣做的好處是:

  • 資源集中管理,實(shí)現(xiàn)資源的可配置與易管理

  • 降低使用資源雙方的依賴程度

在傳統(tǒng)程序中,當(dāng)某個(gè)角色需要另外一個(gè)角色協(xié)助時(shí),由調(diào)用者來(lái)創(chuàng)建被調(diào)用者的實(shí)例。而在Spring中,創(chuàng)建被調(diào)用者的的工作不再由調(diào)用者來(lái)完成,而由第三方Spring容器來(lái)完成,所以稱為控制反轉(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)行過(guò)程分解成各個(gè)切面。面向切面編程基于動(dòng)態(tài)代理實(shí)現(xiàn),降低了類直接的耦合程度。Spring的事務(wù)管理就是基于AOP實(shí)現(xiàn)的。

推薦文章:https://www.2cto.com/kf/201406/305929.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,991評(píng)論 19 139
  • 本文是我自己在秋招復(fù)習(xí)時(shí)的讀書筆記,整理的知識(shí)點(diǎn),也是為了防止忘記,尊重勞動(dòng)成果,轉(zhuǎn)載注明出處哦!如果你也喜歡,那...
    波波波先森閱讀 12,329評(píng)論 6 86
  • 歲尾年初,大家都在寫總結(jié)和展望。也來(lái)湊個(gè)熱鬧,談?wù)勅蚍秶鷥?nèi)銀行業(yè)尤其是零售銀行業(yè)的發(fā)展趨勢(shì)。在吃貨眼中,當(dāng)前銀行...
    北美之北閱讀 576評(píng)論 2 11
  • 1、《老婆發(fā)火的時(shí)候,老公該怎么辦》 這個(gè)標(biāo)題就是提問(wèn)式,引起讀者好奇 2、《別逼老師放棄你的孩子(這幾種家長(zhǎng),老...
    smellfish999閱讀 369評(píng)論 0 0
  • 通了電話,她過(guò)得很好,總是給人很正的一面!給你講好的,高興的,開心的,希望她一直這樣!一切美好!
    猶可以閱讀 172評(píng)論 1 0