面試中的被問到Spring,咱們該怎麼去回答

今天只談一下咱們在面試中的若是面試官問到Spring,你應該怎麼去回答,來獲取面試官的青睞。在個人印象中,Spring框架能夠說是Java世界裏面最爲成功的框架了,在企業的實際的應用裏面,大部分的企業架構都是基於Spring框架的,它的成功來自於他的理念而不是技術,最爲核心的理念是IOC和AOP。接下來咱們就來說講這個Spring吧!面試

Spring的歷史

Spirng從2004年第一個版本至今已經有十多年了,Spring的出現是由於當時Sun公司EJB的失敗,由於當時的EJB2的時代,那配置文件但是很是的多呀,虧了我沒在那個時代去作開發,去寫代碼,否則我估計本身可能怎麼涼的都不知道。數據庫

而在以後的EJB3客服了配置方面的冗餘,可是對於JAVAEE開發來講,更爲致命的是對EJB容器的依賴,也就是EJB智能運行在EJB容器中,EJB容器的笨重,讓不少企業感到熟手無策。編程

正是由於EJB的沒落,致使了Spring的崛起,在Spring中,它會認爲一切Java的類都是資源,而自願都是BEan,容納這些Bean的Spring所提供的IOC容器,因此Spring是一種基於Bean的編程。安全

面試問法一:什麼是Spring

回答:Spring是一個J2EE的框架,這個框架提供了對輕量級IOC的良好支持,同時也提供了對AOP技術很是好的封裝,相比於其餘的框架,Spring框架的設計更加模塊化,框架內的每一個模塊都能完成特定的工做, 並且各個模塊能夠獨立的運行,不會相互的前置,所以,在使用Spring框架的時候,咱們可使用整個框架,也可使用框架中的一部分,例如只使用AOP模塊的日誌管理。架構

回答這個問題的時候,不須要去特別的背誦到底什麼是Spring,咱們要說出本身對Spring框架的理解就能夠了,不少時候面試官多是問你的是你本身對框架的理解,而不是全篇背誦。框架

面試問法二:Spring有哪些模塊

圖解以下,模塊化

 

上面就是Spring的一些模塊,在面試中,咱們把這七個模塊說完,要作出相應的一些講解。好比說:函數

  • SpringAOP:採用了面向切面的思想,使Spring框架管理對象支持AOP,同事這個模塊也提供了事務管理,能夠不依賴具體的EJB組件,就能夠將事務管理集成到應用程序中。單元測試

  • SpringORM:提供了對現有的ORM框架的支持,例如Hibernate,JDO,Mybatis等。學習

  • SpringDAO:提供了對數據訪問對象(Data Access Object,DAO)模式和JDBC的支持,把實現業務邏輯和數據庫訪問的代碼實現分離等。

  • SpringWeb:提供了Servlet監聽器的Context和Web應用的上下文,同時還集成了一些現有的Web框架,如Struts。

  • SpringContext:擴展核心容器,提供了Spring上下文環境,給開發人員提供了有用的服務。

  • SpringWebMVC:提供了一個構件Web應用程序的MVC實現。

  • SpringCore:Spring框架的核心容器,他提供了Spring框架的基本的功能,這個模塊最主要的是BeanFactory,它使用工廠模式來建立所須要的對象,同時Beanfactory使用IOC的思想,經過讀取XML文件的方式來實例化對象。

上面介紹只是在面試的時候一些簡單的介紹,能夠自行理解,問到這個問題的時候,面試官可能並非讓你把每一個模塊都分析的特別透徹,不少狀況下都是想看你到之對Spring的理解有多深。

面試問法三:Spring的核心是哪兩個?

Spring核心內容:IOC和AOP。

在面試過程當中,說完核心內容以後,必定要把什麼是IOC,什麼是AOP解釋清楚,而且舉個大家項目中的例子來加以驗證。這個時候,面試官可能就會以爲,你對Spring的應用已經很透徹了。

要點一:什麼是IOC?

控制反轉(Inverse of Control,IOC)有時候也被稱之爲依賴注入,是一種下降對象之間耦合關係的設計思想。通常來講,在分層體系結構中,都是上層調用下層的接口,依賴注入最直接的提現,@AutoWired,@Resource這個註解,

上層調用下層的接口,上層依賴於下層的執行,也就是調用者依賴被調用者,而經過IOC方式,是的上層再也不依賴下層的接口,經過注入實例化對象來選擇不一樣的下層實現,來是先控制反轉。

採用IOC機制能過提升系統的可擴展性,若是對象之間經過顯式調用進行交互會致使調用者和被調用者存在很是緊密的聯繫,其中一方若是出現變更,那麼系統也會進行相應的修改。

就舉個例子,一家商店,出售茶葉,剛開始,店主就只有綠茶出售,那麼至關因而 AbstractTea1 = new GreenTea();可是若是說店家發現綠茶銷售不如隔壁的紅茶銷售好,就想着進紅茶賣,那麼在這個售貨系統過中,凡事出現過AbstractTea1 = new GreenTea(),都得修改爲AbstractTea1 = new BlackTea()。

而這種建立對象實例的方法每每會對致使程序作大幅度的修改。

畫個圖來看一下

經過圖中的方法,能夠把建立對象的過程委託給TeaFactory來完成,在咱們須要使用對象的時候,咱們就直接調用Factroy類中的getTea方法便可,具體建立對象邏輯放在了TeaFactory中來實現,咱們只須要把Greentea換成BlackTea,那麼系統中全部的AbstractTea1 = new GreenTea()這個方法就會替換成BlackTea了,只須要在一個地方作改動就能完成很複雜的事情了。

雖說採用工廠模式以後,加強了系統的可擴展性,可是從本質上講,工廠模式只不過是把程序中變更的邏輯所有都放到了工廠類中了,當系統的類比較多的時候, 就會常常的去改動工廠類中的代碼,咱們採用IOC實現方法以後,就會有另一種。

Spring容器將會根據配置文件來建立調用者對象,同時把被調用的實例化對象經過構造函數或者set()方法的形式注入到調用者對象中。

而咱們回答面試官的問題的時候,同時須要把IOC的優勢也要說出來。

IOC優勢:

  1. 經過IOC容器,開發人員不須要關注對象是怎麼去建立的,同時增長新的類也比較方便了。
  2. IOC容器能夠經過配置文件來肯定須要注入的實例化對象,所以很方便進行單元測試。

要點二:什麼是AOP?

面向切面編程(Aspect Oriented Programming)是面向對象開發的一種補充,他容許開發人員在不改變原來模型的基礎上動態的去修改模型用來知足新的需求,例如,開發人員能夠在不更改原來業務邏輯模型的基礎上動態的增長日誌,安全或者異常處理的功能。

AOP的基本概念

  1. Aspect(切面):一般是一個類,裏面能夠定義切入點和通知

  2. JointPoint(鏈接點):程序執行過程當中明確的點,通常是方法的調用

  3. Advice(通知):AOP在特定的切入點上執行的加強處理,有before,after,afterReturning,afterThrowing,around

  4. Pointcut(切入點):就是帶有通知的鏈接點,在程序中主要體現爲書寫切入點表達式

  5. AOP代理:AOP框架建立的對象,代理就是目標對象的增強。Spring中的AOP代理可使JDK動態代理,也能夠是CGLIB代理,前者基於接口,後者基於子類

上面這些內容其實不少時候在面試的時候不用說的這麼清楚,由於咱們在面試的過程當中,並不必定可以記得這麼清楚,到時候須要咱們表述一個大概的內容便可。

實現代理的兩種代理方式:

  • 靜態代理(我的理解)

針對具體的類編寫代理類。 針對一個接口編寫一個代理類。

  • 動態代理

而動態代理也能夠分爲2種,一種是JDK Proxy,另一種是cglib代理。Spring對於有接口的類使用JDK Proxy,對於無接口和抽象類用Cglib代理,雖然Cglib能夠進行代理,可是Cglib代理是有例外,就是代理類中不能出現final修飾的類或者類中有final修飾的方法。

若是以上的內容你在面試的過程當中,大體上都說出來了,那麼對於面試Spring這一塊,可能概率從百分之50上升到百分之八十了。

也祝你們在將來的面試過程當中,一直穩如泰山!

寫在最後

  • 第一:看完點贊,感謝您的承認;
  • ...
  • 第二:隨手轉發,分享知識,讓更多人學習到;
  • ...
  • 第三:記得點關注,天天更新的!!!
  • ...

相關文章
相關標籤/搜索