Spring 是個java企業級應用的開源開發框架。Spring主要用來開發Java應用,可是有些擴展是針對構建J2EE平臺的web應用。Spring 框架目標是簡化Java企業級應用開發,並經過POJO爲基礎的編程模型促進良好的編程習慣。java
輕量:Spring 是輕量的,基本的版本大約2MB。程序員
控制反轉:Spring經過控制反轉實現了鬆散耦合,對象們給出它們的依賴,而不是建立或查找依賴的對象們。web
面向切面的編程(AOP):Spring支持面向切面的編程,而且把應用業務邏輯和系統服務分開。spring
容器:Spring 包含並管理應用中對象的生命週期和配置。數據庫
MVC框架:Spring的WEB框架是個精心設計的框架,是Web框架的一個很好的替代品。編程
事務管理:Spring 提供一個持續的事務管理接口,能夠擴展到上至本地事務下至全局事務(JTA)。安全
異常處理:Spring 提供方便的API把具體技術相關的異常(好比由JDBC,Hibernate or JDO拋出的)轉化爲一致的unchecked 異常bash
3. 解釋一下什麼是 AOP?session
aop 是面向切面編程,經過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。多線程
簡單來講就是統一處理某一「切面」(類)的問題的編程思想,好比統一處理日誌、異常等。
4. 解釋一下什麼是IOC?
ioc:Inversionof Control(中文:控制反轉)是 spring 的核心,對於 spring 框架來講,就是由 spring 來負責控制對象的生命週期和對象間的關係。
簡單來講,控制指的是當前對象對內部成員的控制權;控制反轉指的是,這種控制權不禁當前對象管理了,由其餘(類,第三方容器)來管理。
5. spring 有哪些主要模塊?
spring core:框架的最基礎部分,提供 ioc 和依賴注入特性。
spring context:構建於 core 封裝包基礎上的 context 封裝包,提供了一種框架式的對象訪問方法。
spring dao:Data Access Object 提供了JDBC的抽象層。
spring aop:提供了面向切面的編程實現,讓你能夠自定義攔截器、切點等。
spring Web:提供了針對 Web 開發的集成特性,例如文件上傳,利用 servlet listeners 進行 ioc 容器初始化和針對 Web 的 ApplicationContext。
spring Web mvc:spring 中的 mvc 封裝包提供了 Web 應用的 Model-View-Controller(MVC)的實現。
6. spring 經常使用的注入方式有哪些?
setter 屬性注入
構造方法注入
註解方式注入
7. spring 中的 bean 是線程安全的嗎?
spring 中的 bean 默認是單例模式,spring 框架並無對單例 bean 進行多線程的封裝處理。
實際上大部分時候 spring bean 無狀態的(好比 dao 類),全部某種程度上來講 bean 也是安全的,但若是 bean 有狀態的話(好比 view model 對象),那就要開發者本身去保證線程安全了,最簡單的就是改變 bean 的做用域,把「singleton」變動爲「prototype」,這樣請求 bean 至關於 new Bean()了,因此就能夠保證線程安全了。
有狀態就是有數據存儲功能。
無狀態就是不會保存數據。
8. spring 支持幾種 bean 的做用域?
spring 支持 5 種做用域,以下:
singleton:spring ioc 容器中只存在一個 bean 實例,bean 以單例模式存在,是系統默認值;
prototype:每次從容器調用 bean 時都會建立一個新的示例,既每次 getBean()至關於執行 new Bean()操做;
Web 環境下的做用域:
request:每次 http 請求都會建立一個 bean;
session:同一個 http session 共享一個 bean 實例;
global-session:用於 portlet 容器,由於每一個 portlet 有單獨的 session,globalsession 提供一個全局性的 http session。
注意: 使用 prototype 做用域須要慎重的思考,由於頻繁建立和銷燬 bean 會帶來很大的性能開銷。
9. spring 自動裝配 bean 有哪些方式?
no:默認值,表示沒有自動裝配,應使用顯式 bean 引用進行裝配。
byName:它根據 bean 的名稱注入對象依賴項。
byType:它根據類型注入對象依賴項。
構造函數:經過構造函數來注入依賴項,須要設置大量的參數。
autodetect:容器首先經過構造函數使用 autowire 裝配,若是不能,則經過 byType 自動裝配。
10. spring 事務實現方式有哪些?
聲明式事務:聲明式事務也有兩種實現方式,基於 xml 配置文件的方式和註解方式(在類上添加 @Transaction 註解)。
編碼方式:提供編碼的形式管理和維護事務。
11. 說一下 spring 的事務隔離?
spring 有五大隔離級別,默認值爲 ISOLATION_DEFAULT(使用數據庫的設置),其餘四個隔離級別和數據庫的隔離級別一致:
ISOLATION_DEFAULT:用底層數據庫的設置隔離級別,數據庫設置的是什麼我就用什麼;
ISOLATIONREADUNCOMMITTED:未提交讀,最低隔離級別、事務未提交前,就可被其餘事務讀取(會出現幻讀、髒讀、不可重複讀);
ISOLATIONREADCOMMITTED:提交讀,一個事務提交後才能被其餘事務讀取到(會形成幻讀、不可重複讀),SQL server 的默認級別;
ISOLATIONREPEATABLEREAD:可重複讀,保證屢次讀取同一個數據時,其值都和事務開始時候的內容是一致,禁止讀取到別的事務未提交的數據(會形成幻讀),MySQL 的默認級別;
ISOLATION_SERIALIZABLE:序列化,代價最高最可靠的隔離級別,該隔離級別能防止髒讀、不可重複讀、幻讀。
髒讀 :表示一個事務可以讀取另外一個事務中還未提交的數據。好比,某個事務嘗試插入記錄 A,此時該事務還未提交,而後另外一個事務嘗試讀取到了記錄 A。
不可重複讀 :是指在一個事務內,屢次讀同一數據。
幻讀 :指同一個事務內屢次查詢返回的結果集不同。好比同一個事務 A 第一次查詢時候有 n 條記錄,可是第二次同等條件下查詢卻有 n+1 條記錄,這就好像產生了幻覺。發生幻讀的緣由也是另一個事務新增或者刪除或者修改了第一個事務結果集裏面的數據,同一個記錄的數據內容被修改了,全部數據行的記錄就變多或者變少了。
Spring 配備構建Web 應用的全功能MVC框架。Spring能夠很便捷地和其餘MVC框架集成,如Struts,Spring 的MVC框架用控制反轉把業務對象和控制邏輯清晰地隔離。它也容許以聲明的方式把請求參數和業務對象綁定。
13. 說一下 spring mvc 運行流程?
spring mvc 先將請求發送給 DispatcherServlet。
DispatcherServlet 查詢一個或多個 HandlerMapping,找處處理請求的 Controller。
DispatcherServlet 再把請求提交到對應的 Controller。
Controller 進行業務邏輯處理後,會返回一個ModelAndView。
Dispathcher 查詢一個或多個 ViewResolver 視圖解析器,找到 ModelAndView 對象指定的視圖對象。
視圖對象負責渲染返回給客戶端。
14. spring mvc 有哪些組件?
前置控制器 DispatcherServlet。
映射控制器 HandlerMapping。
處理器 Controller。
模型和視圖 ModelAndView。
視圖解析器 ViewResolver。
15. @RequestMapping 的做用是什麼?
將 http 請求映射到相應的類/方法上。
16. @Autowired 和@Resource 的區別?
一、@Autowired默認按照byType方式進行bean匹配,@Resource默認按照byName方式進行bean匹配
二、@Autowired是Spring的註解,@Resource是J2EE的註解,這個看一下導入註解的時候這兩個註解的包名就一清二楚了
Spring屬於第三方的,J2EE是Java本身的東西,所以,建議使用@Resource註解,以減小代碼和Spring之間的耦合。
結語
就以這段話自勉、共勉吧。越努力、越幸運,若是你不是官二代、富二代、紅二代,那麼請記住:勤奮纔是改變你命運的惟一捷徑。
掃描下方「二維碼」,選擇「關注公衆號」
天天技術文章第一時間送達!
關注「程序員知識碼頭」,收看更多精彩內容複製代碼