Spring面試題
Spring面試題
1. 談?wù)勀銓?duì)Spring的認(rèn)識(shí)
2. Spring的bean作用域有哪些
3. Spring的bean是線程安全的嗎
4. 談?wù)凷pringMVC的工作流程
5. SpringMVC有哪些常用的注解?有什么作用?
6. 什么是事務(wù)的傳播特性及Spring支持的特性有哪些?
1. 談?wù)勀銓?duì)Spring的認(rèn)識(shí)
Spring 的兩大核心是IOC和AOP。
IOC就是控制反轉(zhuǎn),指的是原本應(yīng)該由我們自己創(chuàng)建和管理依賴的對(duì)象現(xiàn)在交給了Spring容器來管理。能夠?qū)崿F(xiàn)層與層之間的解耦。
AOP就是面向切面編程,面向切面編程的思想是把核心業(yè)務(wù)邏輯與非核心業(yè)務(wù)邏輯抽離,從而實(shí)現(xiàn)核心業(yè)務(wù)與非核心業(yè)務(wù)之間的解耦。比如添加一個(gè)商品信息,核心業(yè)務(wù)就是做添加商品信息記錄這個(gè)操作,非核心業(yè)務(wù)就是事務(wù)的管理,日志,性能檢測,讀寫分離的實(shí)現(xiàn)等等。AOP讓開發(fā)者可以只關(guān)注業(yè)務(wù)邏輯的實(shí)現(xiàn)。
2. Spring的bean作用域有哪些
默認(rèn)是singleton,即單例模式
prototype,每次從容器調(diào)用bean時(shí)都會(huì)創(chuàng)建一個(gè)新的對(duì)象
request,每次http請(qǐng)求都會(huì)創(chuàng)建一個(gè)對(duì)象
session,同一個(gè)session共享一個(gè)對(duì)象
global-session
3. Spring的bean是線程安全的嗎
構(gòu)成線程不安全的三要素:
1,多線程環(huán)境
2,訪問同一個(gè)資源
3,資源具有狀態(tài)性
Spring 的 Bean 默認(rèn)是單例模式,處于多線程的工作環(huán)境,滿足1,2條件。
但 Spring 的 Bean 基本不會(huì)對(duì)數(shù)據(jù)進(jìn)行操作,它是無狀態(tài)的,所以是線程安全的。
4. 談?wù)凷pringMVC的工作流程
首先將請(qǐng)求分發(fā)給前端控制器 DispatcherServlet
DispatcherServlet 查詢 HandlerMapping(映射控制器),從而找到處理請(qǐng)求的Controller(處理器)
Controller 執(zhí)行業(yè)務(wù)邏輯處理后,返回一個(gè) ModelAndView(模型和視圖)
DispatcherServlet 查詢一個(gè)或多個(gè) ViewResolver(視圖解析器),找到 ModelAndView 對(duì)應(yīng)的視圖對(duì)象,視圖對(duì)象負(fù)責(zé)渲染返回給客戶端
5. SpringMVC有哪些常用的注解?有什么作用?

6. 什么是事務(wù)的傳播特性及Spring支持的特性有哪些?
什么是事務(wù)的傳播特性?
我們一般都是將事務(wù)的邊界設(shè)置在Service層
那么當(dāng)我們調(diào)用Service層的一個(gè)方法的時(shí),它能夠保證我們的這個(gè)方法中執(zhí)行的所有的對(duì)數(shù)據(jù)庫的更新操作保持在一個(gè)事務(wù)中
在事務(wù)層里面調(diào)用的這些方法要么全部成功,要么全部失敗。那么事務(wù)的傳播特性也是從這里說起的。
如果你在你的Service層的這個(gè)方法中,還調(diào)用了本類的其他的Service方法,那么在調(diào)用其他的Service方法的時(shí)候,這個(gè)事務(wù)是怎么規(guī)定的呢?
必須保證在我方法里調(diào)用的這個(gè)方法與我本身的方法處在同一個(gè)事務(wù)中,否則無法保證事物的一致性。
事務(wù)的傳播特性就是解決這個(gè)問題的
Spring支持的事務(wù)傳播特性
在Spring中,針對(duì)傳播特性的多種配置,我們大多數(shù)情況下只用其中的一種:PROPGATION_REQUIRED
當(dāng)我調(diào)用service層的方法的時(shí)候,開啟一個(gè)事務(wù),那么在調(diào)用這個(gè)service層里面的其他的方法的時(shí)候,如果當(dāng)前方法產(chǎn)生了事務(wù)就用當(dāng)前方法產(chǎn)生的事務(wù),否則就創(chuàng)建一個(gè)新的事務(wù)。這個(gè)工作是由Spring來幫助我們完成的。
Spring支持的事務(wù)傳播特性
PROPAGATION_REQUIRED:支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就新建一個(gè)事務(wù)。這是最常見的選擇。PROPAGATION_SUPPORTS:支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就以非事務(wù)方式執(zhí)行。
PROPAGATION_MANDATORY:支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就拋出異常。
PROPAGATION_REQUIRES_NEW:新建事務(wù),如果當(dāng)前存在事務(wù),把當(dāng)前事務(wù)掛起
PROPAGATION_NOT_SUPPORTED:以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起。PROPAGATION_NEVER:以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異常。
