Spring | 面試題整理

Spring

什麼是 Spring 框架?

Spring 是一個輕量級的 IOC 和 AOP 容器框架。是爲 Java 應用程序提供基礎性服務的一套框架,目的是用於簡化企業應用程序的開發,它使得開發者只須要關心業務需求。常見的配置方式有三種:基於 XML 的配置、基於註解的配置、基於 Java 的配置。html

主要由如下幾個模塊組成:前端

  1. Spring Core:核心類庫,提供 IOC 服務;
  2. Spring Context:提供框架式的 Bean 訪問方式,以及企業級功能(JNDI、定時任務等);
  3. Spring AOP:AOP 服務;
  4. Spring DAO:對 JDBC 的抽象,簡化了數據訪問異常的處理;
  5. Spring ORM:對現有的 ORM 框架的支持;
  6. Spring Web:提供了基本的面向 Web 的綜合特性,例如多方文件上傳;
  7. Spring MVC:提供面向 Web 應用的 Model-View-Controller 實現。

如何理解 Spring 的 AOP?

AOP 能夠說是對OOP的補充和完善。OOP 引入封裝、繼承和多態性等概念來創建一種對象層次結構,用以模擬公共行爲的一個集合。當咱們須要爲分散的對象引入公共行爲的時候,OOP 則顯得無能爲力。也就是說,OOP 容許你定義從上到下的關係,但並不適合定義從左到右的關係。例如日誌功能。日誌代碼每每水平地散佈在全部對象層次中,而與它所散佈到的對象的核心功能毫無關係。在 OOP 設計中,它致使了大量代碼的重複,而不利於各個模塊的重用。
AOP 是面向切面編程, 將程序中的交叉業務邏輯(好比安全,日誌,事務等),封裝成一個切面,而後注入到目標對象(具體業務邏輯)中去。java

AOP 的實現方式

織入:指代碼切入到目標函數的過程,例如 aspectJ 到 java 程序的過程稱爲織入。數據庫

靜態AOP

在編譯期,切面直接以字節碼的形式編譯到目標字節碼文件中。
AspectJ 屬於靜態 AOP,是在編譯時進行加強,會在編譯的時候將 AOP 邏輯織入到代碼中,須要專有的編譯器和織入器。編程

動態AOP

實現原理是爲被代理的業務接口生成代理類,將AOP邏輯寫入到代理類中,在運行時動態織入AOP,使用反射執行織入的邏輯。 
主要實現方式依賴 java.lang.reflect 包下的 InvocationHandler 和 Proxy 類。安全

  • 優勢:Java 標準庫原生支持,使用簡單,無需引用額外的包。相對於靜態 AOP 更靈活。
  • 缺點:帶代理的類必須是接口,靈活性受到一些限制;使用反射會影響一些性能。

動態代碼字節生成

CGLib 是動態代碼字節生成的實現,它封裝字節碼生成工具 Asm,原理是在運行期間目標字節碼加載後,生成目標類的子類,將切面邏輯加入到子類中,因此使用 Cglib 實現 AOP 不須要基於接口。微信

  • 優勢:沒有接口也能夠織入,靈活性高。
  • 缺點:擴展類的實例方法爲 final 時,則沒法進行織入。

自定義類加載器

在運行前,目標加載前,將切面邏輯加到目標字節碼中。app

IOC

在傳統的開發模式下,咱們都是採用直接 new 一個對象的方式來建立對象,也就是說你依賴的對象直接由你本身控制,可是有了 IOC 容器後,則直接由 IoC 容器來控制。因此「誰控制誰」,固然是 IoC 容器控制對象。框架

MVC

image.png

MVC指MVC模式的某種框架,它強制性的使應用程序的輸入、處理和輸出分開。使用MVC應用程序被分紅三個核心部件:模型、視圖、控制器。它們各自處理本身的任務.函數

Model(模型)用於處理應用程序數據邏輯的部分。一般模型對象負責在數據庫中存取數據。

View(視圖)處理數據顯示的部分。一般視圖是依據模型數據建立的。

Controller(控制器)處理用戶交互的部分。一般控制器負責從視圖讀取數據,控制用戶輸入,並向模型發送數據。它使視圖與模型分離開。

Spring MVC

Spring MVC 框架主要由 DispatcherServlet、處理器映射、控制器、視圖解析器、視圖組成.
微信圖片_20200918211314.jpg

Spring MVC 的工做流程以下:

  1. 客戶端請求提交到 DispatcherServlet。
  2. 由 DispatcherServlet 控制器尋找一個或多個 HandlerMapping,找處處理請求的 Controller。
  3. DispatcherServlet 將請求提交到 Controller。
  4. Controller 調用業務邏輯處理後返回 ModelAndView 給 DispatcherServlet。
  5. DispatcherServlet 尋找一個或多個 ViewResolver 視圖解析器,找到 ModelAndView 指定的視圖。
  6. 視圖負責將模型結果顯示到客戶端。

Spring MVC接口

在圖 1 中包含 4 個 Spring MVC 接口,即 DispatcherServlet(前端控制器)、HandlerMapping、Controller 和 ViewResolver(視圖解析器)。

DispatcherServlet: Spring MVC 全部的請求都通過 DispatcherServlet 來統一分發,在 DispatcherServlet 將請求分發給 Controller 以前須要藉助 Spring MVC 提供的 HandlerMapping 定位到具體的 Controller。

HandlerMapping: 接口負責完成客戶請求到 Controller 映射。

Controller :處理用戶請求。一旦 Controller 處理完用戶請求,將返回 ModelAndView 對象給 DispatcherServlet 前端控制器,ModelAndView 中包含了模型(Model)和視圖(View)。表示模型應該映射到哪一個視圖上,但傳遞的視圖名並不直接表示某個特定的JSP,僅僅傳遞了一個邏輯名稱,這個名字將用來查找產生結果的真正視圖。DisPatcherServlet將會使用視圖解析器來將邏輯視圖名匹配微一個特定的視圖實現。

從宏觀角度考慮,DispatcherServlet 是整個 Web 應用的控制器;從微觀考慮,Controller 是單個 Http 請求處理過程當中的控制器,而 ModelAndView 是 Http 請求過程當中返回的模型(Model)和視圖(View)。

ViewResolver(視圖解析器):在 Web 應用中負責查找 View 對象,從而將相應結果渲染給客戶。

參考資料

  1. https://blog.csdn.net/qq_3433...
  2. https://www.cnblogs.com/stanl...
相關文章
相關標籤/搜索