為什么要使用 spring?
Spring是一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器框架,可以解決企業應用開發的復雜性
輕量 (從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小只有1MB多的JAR文件里發布。並且Spring所需的處理開銷也是微不足道的)
控制反轉 (解決耦合問題,一個對象依賴其它對象,會通過被動的方式傳遞進來,而不是自己去創建或尋找這個對象)
面向切面 (分離應用的業務邏輯與系統級服務(例如審計(auditing)和事務(transaction)管理)進行內聚性的開發。應用對象只實現它們應該做的——完成業務邏輯——僅此而已。)
容器 (ApplicationContext就是一個容器,我們在spring的xml配置文件中配置的bean,可以用來創建一個單獨的實例或者每次需要時都生成一個新的實例)
框架 (框架是軟件開發的一套解決方案,spring框架提供很多基礎功能,事務管理,持久化框架,我們只需要注重邏輯,讓我們編寫更干凈、更可管理、並且更易於測試)
解釋下什么是AOP?
aop是面向切面的編程。 它可以通過預編譯方式和運行期動態代理實現在不修改源代碼的情況下給程序動態統一添加功能的一種技術
解釋一下什么是 ioc?
控制反轉:所謂控制反轉就是把對象(bean)對象和維護對象(bean)之間的關系的權利轉移到Sqring容器中去了(ApplicationContext.xml)而程序本身不在維護了
spring 常用的注入方式有哪些?
-
構造方法注入
-
setter注入
-
基於注解的注入
spring 中的 bean 是線程安全的嗎?
容器本身並沒有提供Bean的線程安全策略,因此可以說spring容器中的Bean本身不具備線程安全的特性,但是具體還是要結合具體scope的Bean去研究。
說一下 spring 的事務隔離?
事務隔離級別指的是一個事務對數據的修改與另一個並行的事務的隔離程度,當多個事務同時訪問相同數據時,如果沒有采取必要的隔離機制,就可能發生以下問題:
-
臟讀:一個事務讀到另一個事務未提交的更新數據。
-
幻讀:例如第一個事務對一個表中的數據進行了修改,比如這種修改涉及到表中的“全部數據行”。同時,第二個事務也修改這個表中的數據,這種修改是向表中插入“一行新數據”。那么,以后就會發生操作第一個事務的用戶發現表中還存在沒有修改的數據行,就好象發生了幻覺一樣。
-
不可重復讀:比方說在同一個事務中先后執行兩條一模一樣的select語句,期間在此次事務中沒有執行過任何DDL語句,但先后得到的結果不一致,這就是不可重復讀。
說一下 spring mvc 運行流程?
Spring MVC運行流程圖:
- 第一步:發起請求到前端控制器(DispatcherServlet)
- 第二步:前端控制器請求HandlerMapping查找 Handler (可以根據xml配置、注解進行查找)
- 第三步:處理器映射器HandlerMapping向前端控制器返回Handler,HandlerMapping會把請求映射為HandlerExecutionChain對象(包含一個Handler處理器(頁面控制器)對象,多個HandlerInterceptor攔截器對象),通過這種策略模式,很容易添加新的映射策略
- 第四步:前端控制器調用處理器適配器去執行Handler
- 第五步:處理器適配器HandlerAdapter將會根據適配的結果去執行Handler
- 第六步:Handler執行完成給適配器返回ModelAndView
- 第七步:處理器適配器向前端控制器返回ModelAndView (ModelAndView是springmvc框架的一個底層對象,包括 Model和view)
- 第八步:前端控制器請求視圖解析器去進行視圖解析 (根據邏輯視圖名解析成真正的視圖(jsp)),通過這種策略很容易更換其他視圖技術,只需要更改視圖解析器即可
- 第九步:視圖解析器向前端控制器返回View
- 第十步:前端控制器進行視圖渲染 (視圖渲染將模型數據(在ModelAndView對象中)填充到request域)
- 第十一步:前端控制器向用戶響應結果
spring mvc 有哪些組件?
Spring MVC的核心組件:
-
DispatcherServlet:中央控制器,把請求給轉發到具體的控制類
-
Controller:具體處理請求的控制器
-
HandlerMapping:映射處理器,負責映射中央處理器轉發給controller時的映射策略
-
ModelAndView:服務層返回的數據和視圖層的封裝類
-
ViewResolver:視圖解析器,解析具體的視圖
-
Interceptors :攔截器,負責攔截我們定義的請求然后做處理工作
@RequestMapping 的作用是什么?
RequestMapping是一個用來處理請求地址映射的注解,可用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以該地址作為父路徑。
value, method:
-
value:指定請求的實際地址,指定的地址可以是URI Template 模式(后面將會說明);
-
method:指定請求的method類型, GET、POST、PUT、DELETE等;