什麼是Spring?
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 支援的事務管理類型有哪些?
程式化事務管理:
在此過程中,在程式設計的幫助下管理事務。
提供了極大的靈活性,但維護起來非常困難。
聲明式事務管理:
在此,事務管理與業務代碼分離。
僅使用注解或基于 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 MVC架構有什麼用?
Spring Web MVC 架構提供 模型-視圖-控制器 架構和随時可用的元件,用于開發靈活且松散耦合的 Web 應用程式。
DispatcherServlet 的工作流程?
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 關聯的能力方面有所不同。