❝做爲一個Java程序員,Spring沒得商量,對咱們是必須會的,並且很重要,幾乎咱們大多項目都用得它,做爲一個優質且生態系統很是全面的框架,不只在使用上很給力,源碼也有很大的學習價值。小編給你們整理了50道面試題,或者說50個知識點,能夠先收藏起來了😊。前端
❞
Spring框架是因爲軟件開發的複雜性而建立的,Spring使用的是基本的JavaBean來完成之前只可能由EJB完成的事。從簡單性、可測性和鬆耦合性角度而言,絕大部分Java應用均可以用Spring。java
大約分爲20個模塊。程序員
優勢:web
缺點:面試
負責建立對象、管理對象(經過依賴注入)、整合對象、配置對象以及管理這些對象的生命週期。正則表達式
依賴注入是Spring實現IoC的一種重要手段,將對象間的依賴關係的控制權從開發人員手裏轉移到容器。spring
1.構造器注入編程
2.setter注入json
3.接口注入(咱們幾乎不用)緩存
優勢:
缺點:
建立對象步驟複雜,有必定學習成本。
利用反射建立對象,效率上有損。(對於代碼的靈活性和可維護性來看,Spring對於咱們的開發帶來了很大的便利,這點損耗不算什麼哦)
1.Spring 對bean進行實例化。
2.Spring將值和bean的引用注入到 bean對應的屬性中。
3.若是bean實現了BeanNameAware接口,Spring將bean的ID傳遞給setBeanName()方法。
4.若是bean實現了BeanFactoryAware接口, Spring將調用setBeanFactory()方法,將 bean所在的應用引用傳入進來。
5.若是bean實現了ApplicationContextAware接口,Spring將調用setApplicationContext()方法,將bean所在的應用引用傳入進來。
6.若是bean實現了BeanPostProcessor 接口,Spring將調用他們的post-ProcessBeforeInitalization()方法。
7.若是bean實現了InitializingBean接口,Spring將調用他們的after-PropertiesSet()方法,相似地,若是bean使用init-method聲明瞭初始化方法,該方法也會被調用。
8.若是bean實現了BeanPostProcessor接口,Spring將調用它們的post-ProcessAfterInitialization()方法。
9.此時, bean已經準備就緒,能夠被應用程序使用了,他們將一直駐留在應用上下文中,直到該應用被銷燬。
10.若是bean實現了DisposableBean接口,Spring將調用它的destory()接口方法,一樣,若是bean使用destroy-method聲明瞭銷燬方法,該方法也會被調用。
在軟件業,AOP爲Aspect Oriented Programming的縮寫,意爲:面向切面編程,經過預編譯方式和運行期間動態代理實現程序功能的統一維護的一種技術。
前置通知(Before): 目標方法被調用以前調用通知功能。
後置通知(After): 目標方法完成以後調用通。
返回通知(After-returning): 目標方法成功執行以後調用通知。
異常通知(After-throwing): 目標方法拋出異常後調用通知。
環繞通知(Around): 在被通知的方法調用以前和調用以後執行自定義的行爲。
鏈接點是在應用執行過程當中可以插入切面的一個點。這個點能夠是調用方法時、拋出異常時、甚至修改一個字段時。
切點的定義會匹配通知所要織入的一個或多個鏈接點。咱們一般使用明確的類和方法名稱,或是利用正則表達式定義所匹配的類和方法名稱來指定這些切點。有些AOP框架容許咱們建立動態的切點,能夠根據運行時的決策(好比方法的參數值)來決定是否應用通知。
切面是通知和切點的結合。通知和切點共同定義了切面的所有內容。
織入是把切面應用到目標對象並建立新的代理對象的過程。切面在指定的鏈接點被織入到目標對象中。
引入容許咱們向現有的類添加新方法或屬性。
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯彙集到一個部件裏面,在改進和個性化定製界面及用戶交互的同時,不須要從新編寫業務邏輯。
MVC被獨特的發展起來用於映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。
SpringMVC是Spring框架的一個模塊。是一個基於MVC的框架。
DispatcherServlet
DispatcherServlet : 前端控制器,也叫中央控制器。相關組件都是它來調度。
HandlerMapping : 處理器映射器,根據URL路徑映射到不一樣的Handler。
HandlerAdapter : 處理器適配器,按照HandlerAdapter的規則去執行Handler。
Handler : 處理器,由咱們本身根據業務開發。
ViewResolver : 視圖解析器,把邏輯視圖解析成具體的視圖。
View : 一個接口,它的實現支持不一樣的視圖類型(freeMaker,JSP等)
1.用戶請求旅程的第一站是DispatcherServlet。
2.收到請求後,DispatcherServlet調用HandlerMapping,獲取對應的Handler。
3.若是有攔截器一併返回。
4.拿到Handler後,找到HandlerAdapter,經過它來訪問Handler,並執行處理器。
5.執行Handler的邏輯。
6.Handler會返回一個ModelAndView對象給DispatcherServlet。
7.將得到到的ModelAndView對象返回給DispatcherServlet。
8.請求ViewResolver解析視圖,根據邏輯視圖名解析成真正的View。
9.返回View給DispatcherServlet。
10.DispatcherServlet對View進行渲染視圖。
11.DispatcherServlet響應用戶。
1.具備Spring的特性。
2.能夠支持多種視圖(jsp,freemaker)等。
3.配置方便。
4.非侵入。
5.分層更清晰,利於團隊開發的代碼維護,以及可讀性好。
Tips:Jsp目前不多有人用了。
不是。具體線程問題須要開發人員來處理。
組件掃描(component scanning):Spring會自動發現應用上下文中所建立的bean。
自動裝配(autowiring):Spring自動知足bean之間的依賴。
no - 默認設置,表示沒有自動裝配。
byName : 根據名稱裝配。
byType : 根據類型裝配。
constructor : 把與Bean的構造器入參具備相同類型的其餘Bean自動裝配到Bean構造器的對應入參中。
autodetect :先嚐試constructor裝配,失敗再嘗試byType方式。
default:由上級標籤的default-autowire屬性肯定。
Hibernate
iBatis
JPA (Java Persistence API)
TopLink
JDO (Java Data Objects)
OJB
Dao 層實現類註解,掃描註冊 bean。
講常量、配置中的變量值、等注入到變量中。
定義控制器類。
@Aspect
@RequestMapping
做用是將返回對象經過適當的轉換器轉成置頂格式,寫進response的body區。一般用來返回json、xml等。
@RestController
@PathVariable
用來標記緩存查詢。
@CacheEvict
泛指組件,很差歸類時,能夠用它。
當建立多個相同類型的 bean 時,而且想要用一個屬性只爲它們其中的一個進行裝配,在這種狀況下,你可使用 @Qualifier 註釋和 @Autowired 註釋經過指定哪個真正的 bean 將會被裝配來消除混亂。
@Transaction
聲明式:聲明式事務也有兩種實現方式。
編碼式:提供編碼的形式管理和維護事務。
事務在嵌套方法調用中如何傳遞,具體如何傳播,取決於事務傳播行爲。
參考:
《Spring in action 4》
《SPRING技術內幕》
《Spring源碼深度解析》
《Spring5企業級開發實戰》
https://spring.io
百度百科
本文使用 mdnice 排版