Spring高級面試專題錦集
- 什麼是 Spring 框架?Spring 框架有哪些主要模塊?
- 使用 Spring 框架能帶來哪些好處?
- 什麼是控制反轉(IOC)?什麼是依賴注入?
- 請解釋下 Spring 框架中的 IoC?
- BeanFactory 和 ApplicationContext 有什麼區別?
- Spring 有幾種配置方式?
- 如何用基於 XML 配置的方式配置 Spring?
- 如何用基於 Java 配置的方式配置 Spring?
- 怎樣用註解的方式配置 Spring?
- 請解釋 Spring Bean 的生命週期?
一、什麼是 Spring 框架?Spring 框架有哪些主要模塊?
Spring 框架是一個爲 Java 應用程序的開發提供了綜合、普遍的基礎性支持的 Java 平臺。Spring 幫助開發者解決了開發中基礎性的問題,使得開發人員能夠專一於應用程序的開發。Spring 框架自己亦是按照設計模式精心打造,這使得咱們能夠在開發環境中安心的集成Spring 框架,沒必要擔憂 Spring 是如何在後臺進行工做的。Spring 框架至今已集成了 20 多個模塊。這些模塊主要被分以下圖所示的核心容器、數據訪問/集成,、Web、AOP(面向切面編程)、工具、消息和測試模塊。web
二、使用 Spring 框架能帶來哪些好處?
下面列舉了一些使用 Spring 框架帶來的主要好處:面試
- Dependency Injection(DI) 方法使得構造器和 JavaBean properties 文件中的依賴關係一目瞭然。
- 與 EJB 容器相比較,IoC 容器更加趨向於輕量級。這樣一來IoC 容器在有限的內存和 CPU 資源的狀況下進行應用程序的開發和發佈就變得十分有利。
- Spring 並無閉門造車,Spring 利用了已有的技術好比ORM 框架、logging 框架、J2EE、Quartz 和 JDK Timer,以及其餘視圖技術。
- Spring 框架是按照模塊的形式來組織的。由包和類的編號就能夠看出其所屬的模塊,開發者僅僅須要選用他們須要的模塊便可。
- 要測試一項用 Spring 開發的應用程序十分簡單,由於測試相關的環境代碼都已經囊括在框架中了。更加簡單的是,利用JavaBean 形式的 POJO 類,能夠很方便的利用依賴注入來寫入測試數據。
- Spring 的 Web 框架亦是一個精心設計的 Web MVC 框架,爲開發者們在 web 框架的選擇上提供了一個除了主流框架好比Struts、過分設計的、不流行 web 框架的之外的有力選項。
- Spring 提供了一個便捷的事務管理接口,適用於小型的本地事物處理(好比在單 DB 的環境下)和複雜的共同事物處理(好比利用 JTA 的複雜 DB 環境)。
三、什麼是控制反轉(IOC)?什麼是依賴注入?
- 控制反轉是應用於軟件工程領域中的,在運行時被裝配器對象來綁定耦合對象的一種編程技巧,對象之間耦合關係在編譯時一般是未知的。在傳統的編程方式中,業務邏輯的流程是由應用程序中的早已被設定好關聯關係的對象來決定的。在使用控制反轉的狀況下,業務邏輯的流程是由對象關係圖來決定的,該對象關係圖由裝配器負責實例化,這種實現方式還能夠將對象之間的關聯關係的定義抽象化。而綁定的過程是經過「依賴注入」實現的。
- 控制反轉是一種以給予應用程序中目標組件更多控制爲目的設計範式,並在咱們的實際工做中起到了有效的做用。
- 依賴注入是在編譯階段還沒有知所需的功能是來自哪一個的類的狀況下,將其餘對象所依賴的功能對象實例化的模式。這就須要一種機制用來激活相應的組件以提供特定的功能,因此依賴注入是控制反轉的基礎。不然若是在組件不受框架控制的狀況下,框架又怎麼知道要建立哪一個組件?
在 Java 中依然注入有如下三種實現方式:spring
- 構造器注入
- Setter 方法注入
- 接口注入
四、請解釋下 Spring 框架中的 IoC?
- Spring 中的 org.spring framework.beans 包和org.spring framework.context 包構成了 Spring 框架 IoC 容器的基礎。
- Bean Factory 接口提供了一個先進的配置機制,使得任何類型的對象的配置成爲可能。Application Context 接口對Bean Factory(是一個子接口)進行了擴展,在 Bean Factory 的基礎上添加了其餘功能,好比與 Spring 的 AOP 更容易集成,也提供了處理 message resource 的機制(用於國際化)、事件傳播以及應用層的特別配置,好比針對 Web 應用的 Web Application Context。
- org.spring framework.beans.factory.Bean Factory 是 Spring IOC 容器的具體實現,用來包裝和管理前面提到的各類bean Bean Factory 接口是 Spring IoC 容器的核心接口。
五、Bean Factory 和 Application Context 有什麼區別?
- Bean Factory 能夠理解爲含有 bean 集合的工廠類。Bean Factory 包含了種 bean 的定義,以便在接收到客戶端請求時將對應的 bean 實例化。
- Bean Factory 還能在實例化對象的時生成協做類之間的關係。此舉將 bean 自身與 bean 客戶端的配置中解放出來。Bean Factory 還包含了 bean 生命週期的控制,調用客戶端的初始化方法(initialization methods)和銷燬方法(destruction methods)。
- 從表面上看,application context 如同 bean factory 同樣具備 bean 定義、bean 關聯關係的設置,根據請求分發 bean 的功能。但 application context 在此基礎上還提供了其餘的功能。
1. 提供了支持國際化的文本消息編程
2. 統一的資源文件讀取方式設計模式
3. 已在監聽器中註冊的 bean 的事件安全
如下是三種較常見的Application Context 實現方式:bash
一、Class PathXml Application Context:從 classpath 的 XML 配置文件中讀取上下文,並生成上下文定義。應用程序上下文從程序環境變量中取得。微信
1\. ApplicationContext context = new
ClassPathXmlApplicationContext(「bean.xml」);
複製代碼
二、File System XML Application Context :由文件系統中的XML 配置文件讀取上下文。架構
1\. ApplicationContext context = new
FileSystemXmlApplicationContext(「bean.xml」);
複製代碼
三、XML Web Application Context:由 Web 應用的 XML 文件讀取上下文。app
因爲篇幅限制,剩下的將以圖片形式展現,對文章中學習腦圖感興趣的能夠 關注 轉發後私信【筆記】獲取資源地址。
- Spring Bean 的做用域之間有什麼區別?
- 什麼是 Spring inner beans?
- Spring 框架中的單例 Beans 是線程安全的麼?
- 請舉例說明如何在Spring中注入一個JavaCollection?
- 如何向SpringBean中注入一個Java.util.Properties?
- 請解釋SpringBean的自動裝配?
- 請解釋自動裝配模式的區別?
- 如何開啓基於註解的自動裝配?
- 請舉例解釋@Required註解?
- 請舉例解釋@Autowired註解?
- 請舉例說明@Qualifier註解?
- 構造方法注入和設值注入有什麼區別?
- Spring框架中有哪些不一樣類型的事件?
- FileSystemResource和ClassPathResource有何區別?
- Spring框架中都用到了哪些設計模式?
對文章中學習腦圖感興趣的能夠 關注 轉發後私信【筆記】獲取資源地址。還有更多面試題整理中,能夠一併獲取。
歡迎關注專欄:Java架構技術進階。裏面有大量batj面試題集錦,還有各類技術分享,若有好文章也歡迎投稿哦。 微信公衆號:慕容千語的架構筆記。歡迎關注一塊兒進步。