天天看點

Spring 和 Spring MVC 面試題彙總---《絕絕子》

什麼是Spring?

Spring 和 Spring MVC 面試題彙總---《絕絕子》
Spring 是一個開源應用架構,旨在降低應用程式開發的複雜度。它是輕量級、松散耦合的。它具有分層體系結構,允許使用者選擇元件,它可以內建其他架構,如熟知的 Struts2、Mybatis等,是以又稱為架構的架構。
           

不同版本的Spring有哪些主要功能?

Version(版本) Feature(特點)
Spring 2.5 2007年釋出,這是第一個支援注解的版本。
Spring 3.0 2009年釋出,它利用了java5中的改進,并為JEE6提供了支援 。
Spring 4.0 2013年釋出,這是第一個完全支援JAVA8的版本。

Spring的優點?

由于Spring的分層架構,使用者可以自由選擇自己需要的元件。
依賴注入和控制反轉,JDBC得以簡化,它是開源免費的。
           

Spring有哪些不同的功能?

輕量級:

Srping在代碼量和透明度方面都很輕便。
           

IOC:

控制反轉。
           

AOP:

面向切面程式設計可以将應用業務邏輯和系統服務分離,以實作高内聚。
           

容器:

Spring 負責建立和管理對象(Bean)的生命周期和配置。
           

MVC:

對Web應用提供了高度可配置性,其他架構的內建也十分友善。
           

事務管理:

提供了用于事務管理的通用抽象層。Spring的失誤支援也可用于容器較少的環境。
           

JDBC異常:

Spring的JDBC抽象層提供了一個異常層次結構,簡化了錯誤處理政策。
           

什麼是Spring的配置檔案?

Spring配置檔案是XML檔案,該檔案主要包含類資訊。
它描述了這些類是如何配置以及互相引入的。
           

Spring應用程式有哪些不同的元件?

接口:

定義功能。
           

Bean類:

包含屬性,setter和getter方法,函數等。
           

AOP:

提供面向切面程式設計的功能。
           

Bean配置檔案:

包含類的資訊以及如何配置它們。
           

使用者程式:

使用接口。
           

什麼是Spring IOC (依賴注入) ?

在依賴注入中,不需要建立對象,但必須描述配置檔案中哪些元件需要哪些服務,由IOC容器将它們裝配在一起。
           

依賴注入有多少種方式?

構造函數注入—setter注入—接口注入

在Spring中,僅使用構造函數和setter注入。
           

構造函數和setter的差別?

構造函數注入 setter注入
沒有部分注入 有部分注入
不會覆寫setter屬性 會覆寫setter屬性
任意修改都會建立一個新執行個體 任意修改都不會建立一個新執行個體
适用于設定很多屬性 适用于設定少量屬性

Spring中有多少種IOC容器?

BeanFactory:

BeanFactory就像一個包含bean集合的工廠類。
它會在用戶端要求執行個體化bean。
           

ApplicationContext:

ApplicationContext接口擴充了BeanFactory接口。
它在BeanFactory基礎上提供了一些額外的功能。
           

BeanFactory和ApplicationContext的差別?

BeanFactory BeanFactory
懶加載 即時加載
文法顯示提供資源對象 自己建立和管理資源對象
不支援國際化 支援國際化
不支援基于依賴的注解 支援基于依賴的注解

IOC的好處?

它可以最小化應用程式中的代碼量,易于測試,不需要單元測試用例中的任何單例,松耦合,支援即時的執行個體化和延遲加載服務。
           

IOC的實作機制?

工廠模式加反射機制。
           

什麼是Spring bean?

是構成使用者應用程式主幹的對象。
Bean由Spring IOC 容器管理,由Spring IOC 容器執行個體化,配置,裝配和管理。
Bean是基于使用者提供給容器的配置源資料建立。
           

Spring 提供了哪些配置方式?

XML配置—注解配置—JAVA-API配置

什麼是Spring 裝配?

當bean在Spring容器中組合在一起時,它被稱為裝配或bean裝配。
Spring容器需要知道什麼bean以及容器應該如何使用依賴注入來講bean綁定在一起,同時裝配bean。
           

自動裝配有哪些方式?

no:

這是預設設定,表示沒有自動裝配。應使用顯示bena引用進行裝配。
           

byName:

根據bean的名稱注入對象依賴項。
           

byType:

根據類型注入對象依賴項。
           

@Component,@Repository,@Service,@Controller的差別?

@Component:将java類标記為bean,由Spring工廠自動建立對象。

@Repository: 為Dao提供了額外的好處,将Dao導入IOC容器,并使未經檢查的異常有資格轉換為 Spring DataAccessException。

@Service: 是元件注解的特化,可以在業務層中使用。

@Controller:将一個類标記為Spring Web MVC  控制器。
			 标有它的bean 會自動導入到IOC容器中。
           

@Autwired注解的作用?

用于屬性,setter方法,構造函數上,自動裝配bean。
預設情況下,它是類型驅動的注入。
           

@RequestMapping注解的作用?

用于将特定HTTP請求方法映射到将處理相應請求的控制器中的特定類/方法。

此注釋可應用于兩個級别:
類級别: 映射請求的URL。
方法級别: 映射URL以及HTTP請求方法。
           

Spring Dao有什麼用?

Spring Dao 使得JDBC這樣的資料通路技術更容易以一種統一的方式工作。
允許使用者用于在持久性技術之間切換。
還允許在編寫代碼時,無需考慮捕獲每種技術不同的異常。
           

Spring Dao 抛出的異常 :

Spring 和 Spring MVC 面試題彙總---《絕絕子》

Spring 支援的事務管理類型有哪些?

程式化事務管理:

在此過程中,在程式設計的幫助下管理事務。
提供了極大的靈活性,但維護起來非常困難。
           

聲明式事務管理:

在此,事務管理與業務代碼分離。
僅使用注解或基于 XML 的配置來管理事務。
           

什麼是AOP?

AOP(Aspect-Oriented Programming),  面向切面程式設計。
它與OOP( Object-Oriented Programming, 面向對象程式設計) 相輔相成。
在 OOP 中, 我們以類(class)作為我們的基本單元, 而 AOP 中的基本單元是 Aspect(切面)。
           

什麼是通知(Advice)?

特定JoinPoint(連接配接點)處的Aspect所采取的動作稱為Advice。
Spring AOP使用一個Advice作為攔截器,在JoinPoint "周圍"維護一系列的攔截器。
           

有哪些類型的通知(Advice)?

Before :

這些類型的 Advice 在 joinpoint 方法之前執行,并使用@Before 注解标記進行配置。
           

After Returning :

這些類型的 Advice 在連接配接點方法正常執行後執行,并使用@AfterReturning 注解标記進行配置。
           

After Throwing :

這些類型的 Advice 僅在 joinpoint 方法通過抛出異常退出并使用 @AfterThrowing 注解标記配置時執行。
           

After (finally) :

這些類型的 Advice 在連接配接點方法之後執行,無論方法退出是正常還是異常傳回,并使用 @After 注解标記進行配置。
           

Around :

這些類型的 Advice 在連接配接點之前和之後執行,并使用@Around 注解标記進行配置。
           

AOP有哪些實作方式?

靜态代理:

指使用 AOP 架構提供的指令進行編譯,進而在編譯階段就可生成 AOP 代理類,是以也稱為編譯時增強。
           

動态代理:

在運作時在記憶體中“臨時”生成 AOP 動态代理類,是以也被稱為運作時增強。
           

如何了解Spring中的代理?

将 Advice 應用于目标對象後建立的對象稱為代理。在用戶端對象的情況下,目标對象和代理對象是相同的。
           
Spring 和 Spring MVC 面試題彙總---《絕絕子》

Spring MVC架構有什麼用?

Spring Web MVC 架構提供 模型-視圖-控制器 架構和随時可用的元件,用于開發靈活且松散耦合的 Web 應用程式。
           

DispatcherServlet 的工作流程?

Spring 和 Spring MVC 面試題彙總---《絕絕子》
1、向伺服器發送 HTTP 請求,請求被前端控制器 DispatcherServlet 捕獲。

2、 DispatcherServlet 根據 -servlet.xml 中的配置對請求的 URL 進行解析,得請求資源辨別符(URI)。
    然後根據該 URI,調用 HandlerMapping獲得該 Handler 配置的所有相關的對象(包括 Handler 對象以及 Handler 對象對應的攔截器)。
    最後以 HandlerExecutionChain 對象的形式傳回。

3、 DispatcherServlet 根據獲得的 Handler,選擇一個合适的HandlerAdapter。
   (附注:如果成功獲得 HandlerAdapter 後,此時将開始執行攔截器的 preHandler(...)方法)。

4、提取 Request 中的模型資料,填充 Handler 入參,開始執行 Handler( Controller)。
   
5、Handler(Controller)執行完成後,向 DispatcherServlet 傳回一個ModelAndView 對象。

6、根據傳回的 ModelAndView,選擇一個适合的 ViewResolver(必須是已經注冊到 Spring 容器中的 ViewResolver)傳回給 DispatcherServlet。

7、 ViewResolver 結合 Model 和 View,來渲染視圖。

8、視圖負責将渲染結果傳回給用戶端。
           

什麼是WebApplicationContext?

WebApplicationContext 是 ApplicationContext 的擴充。
它具有 Web 應用程式所需的一些額外功能。
它與普通的 ApplicationContext 在解析主題和決定與哪個 servlet 關聯的能力方面有所不同。
           

繼續閱讀