本文是在網上看了各類面試指南收集的題目及答案。無心冒犯各位原創做者,若是在您的博客或者寫做平臺有類似問題答案能夠跟我說,我給您連接加上,我只是爲了方便之後本身須要的時候刷一刷,不用在處處找題。前端
BeanFactory 能夠理解爲含有bean集合的工廠類。BeanFactory 包含了種bean的定義,以便在接收到客戶端請求時將對應的bean實例化。
BeanFactory還能在實例化對象的時生成協做類之間的關係。此舉將bean自身與bean客戶端的配置中解放出來。BeanFactory還包含了bean生命週期的控制,調用客戶端的初始化方法(initializationmethods)和銷燬方法(destruction methods)。
從表面上看,applicationcontext如同beanfactory同樣具備bean定義、bean關聯關係的設置,根據請求分發bean的功能。但applicationcontext在此基礎上還提供了其餘的功能。
提供了支持國際化的文本消息統一的資源文件讀取方式已在監聽器中註冊的bean的事件web
Spring Bean的生命週期簡單易懂。在一個bean實例被初始化時,須要執行一系列的初始化操做以達到可用的狀態。一樣的,當一個bean不在被調用時須要進行相關的析構操做,並從bean容器中移除。Spring bean factory 負責管理在spring容器中被建立的bean的生命週期。Bean的生命週期由兩組回調(call back)方法組成。
初始化以後調用的回調方法。
銷燬以前調用的回調方法。
Spring框架提供瞭如下四種方式來管理bean的生命週期事件: InitializingBean和DisposableBean回調接口
針對特殊行爲的其餘Aware接口
Bean配置文件中的Custom init()方法和destroy()方法
@PostConstruct和@PreDestroy註解方式面試
Spring中的 org.springframework.beans包和org.springframework.context包構成了Spring框架IoC容器的基礎。
BeanFactory 接口提供了一個先進的配置機制,使得任何類型的對象的配置成爲可能。ApplicationContex接口對BeanFactory(是一個子接口)進行了擴展,在BeanFactory的基礎上添加了其餘功能,好比與Spring的AOP更容易集成,也提供了處理messageresource的機制(用於國際化)、事件傳播以及應用層的特別配置,好比針對Web應用的WebApplicationContext。
org.springframework.beans.factory.BeanFactory是SpringIoC容器的具體實現,用來包裝和管理前面提到的各類bean。BeanFactory接口是Spring IoC 容器的核心接口。spring
面向切面編程,在咱們的應用中,常常須要作一些事情,可是這些事情與核心業務無關,好比,要記錄全部update方法的執行時間時間,操做人等等信息,記錄到日誌,經過spring的AOP技術,就能夠在不修改update的代碼的狀況下完成該需求。數據庫
Spring AOP中的動態代理主要有兩種方式,JDK動態代理和CGLIB動態代理。JDK動態代理經過反射來接收被代理的類,而且要求被代理的類必須實現一個接口。JDK動態代理的核心是InvocationHandler接口和Proxy類。 若是目標類沒有實現接口,那麼Spring AOP會選擇使用CGLIB來動態代理目標類。CGLIB(Code Generation Library),是一個代碼生成的類庫,能夠在運行時動態的生成某個類的子類,注意,CGLIB是經過繼承的方式作的動態代理,所以若是某個類被標記爲final,那麼它是沒法使用CGLIB作動態代理的。編程
JDK 動態代理類和委託類須要都實現同一個接口。也就是說只有實現了某個接口的類可使用Java動態代理機制。可是,事實上使用中並非遇到的全部類都會給你實現一個接口。所以,對於沒有實現接口的類,就不能使用該機制。而CGLIB則能夠實現對類的動態代理。設計模式
一、編碼方式
所謂編程式事務指的是經過編碼方式實現事務,即相似於JDBC編程實現事務管理。
二、聲明式事務管理方式
聲明式事務管理又有兩種實現方式:基於xml配置文件的方式;另外一個實在業務方法上進行@Transaction註解,將事務規則應用到業務邏輯中數組
a、劃分處理單元——IOC
因爲spring解決的問題是對單個數據庫進行局部事務處理的,具體的實現首相用spring中的IOC劃分了事務處理單元。而且將對事務的各類配置放到了ioc容器中(設置事務管理器,設置事務的傳播特性及隔離機制)。
b、AOP攔截須要進行事務處理的類
Spring事務處理模塊是經過AOP功能來實現聲明式事務處理的,具體操做(好比事務實行的配置和讀取,事務對象的抽象),用TransactionProxyFactoryBean接口來使用AOP功能,生成proxy代理對象,經過TransactionInterceptor完成對代理方法的攔截,將事務處理的功能編織到攔截的方法中。讀取ioc容器事務配置屬性,轉化爲spring事務處理須要的內部數據結構(TransactionAttributeSourceAdvisor),轉化爲TransactionAttribute表示的數據對象。
c、對事物處理實現(事務的生成、提交、回滾、掛起)
spring委託給具體的事務處理器實現。實現了一個抽象和適配。適配的具體事務處理器:DataSource數據源支持、hibernate數據源事務處理支持、JDO數據源事務處理支持,JPA、JTA數據源事務處理支持。這些支持都是經過設計PlatformTransactionManager、AbstractPlatforTransaction一系列事務處理的支持。 爲經常使用數據源支持提供了一系列的TransactionManager。
d、結合
PlatformTransactionManager實現了TransactionInterception接口,讓其與TransactionProxyFactoryBean結合起來,造成一個Spring聲明式事務處理的設計體系。緩存
建立自定義註解和建立一個接口類似,可是註解的interface關鍵字須要以@符號開頭。
註解方法不能帶有參數;
註解方法返回值類型限定爲:基本類型、String、Enums、Annotation或者是這些類型的數組;
註解方法能夠有默認值;
註解自己可以包含元註解,元註解被用來註解其它註解。數據結構
1.spring mvc將全部的請求都提交給DispatcherServlet,它會委託應用系統的其餘模塊負責對請求 進行真正的處理工做。
2.DispatcherServlet查詢一個或多個HandlerMapping,找處處理請求的Controller.
3.DispatcherServlet請請求提交到目標Controller
4.Controller進行業務邏輯處理後,會返回一個ModelAndView
5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象
6.視圖對象負責渲染返回給客戶端。
在 web.xml 文件中給SpringMVC的Servlet配置了load-on-startup,因此程序啓動的時候會初始化 Spring MVC,在 HttpServletBean 中將配置的 contextConfigLocation屬性設置到 Servlet 中,而後在FrameworkServlet 中建立了 WebApplicationContext,DispatcherServlet根據contextConfigLocation 配置的 classpath 下的 xml 文件初始化了Spring MVC 總的組件。
Spring 對 Bean 實例的建立是採用單例註冊表的方式進行實現的,而這個註冊表的緩存是 ConcurrentHashMap 對象。
代理模式—在AOP和remoting中被用的比較多。
單例模式—在spring配置文件中定義的bean默認爲單例模式。
模板方法—用來解決代碼重複的問題。好比. RestTemplate, JmsTemplate, JpaTemplate。
前端控制器—Spring提供了DispatcherServlet來對請求進行分發。
視圖幫助(View Helper)—Spring提供了一系列的JSP標籤,高效宏來輔助將分散的代碼整合在視圖裏。
依賴注入—貫穿於BeanFactory / ApplicationContext接口的核心理念。
工廠模式—BeanFactory用來建立對象的實例。
• JDK動態代理只能對實現了接口的類生成代理,而不能針對類.
• CGLIB是針對類實現代理,主要是對指定的類生成一個子類,覆蓋其中的方法由於是繼承,因此該類或方法最好不要聲明成final。
• JDK代理是不須要以來第三方的庫,只要JDK環境就能夠進行代理
• CGLib 必須依賴於CGLib的類庫,可是它須要類來實現任何接口代理的是指定的類生成一個子類,覆蓋其中的方法,是一種繼承.
• 1 客戶端的全部請求都交給前端控制器DispatcherServlet來處理,它會負責調用系統的其餘模塊來真正處理用戶的請求。
• 2 DispatcherServlet收到請求後,將根據請求的信息(包括URL、HTTP協議方法、請求頭、請求參數、Cookie等)以及HandlerMapping的配置找處處理該請求的Handler(任何一個對象均可以做爲請求的Handler)。
• 3在這個地方Spring會經過HandlerAdapter對該處理進行封裝。
• 4 HandlerAdapter是一個適配器,它用統一的接口對各類Handler中的方法進行調用。
• 5 Handler完成對用戶請求的處理後,會返回一個ModelAndView對象給DispatcherServlet,ModelAndView顧名思義,包含了數據模型以及相應的視圖的信息。
• 6 ModelAndView的視圖是邏輯視圖,DispatcherServlet還要藉助ViewResolver完成從邏輯視圖到真實視圖對象的解析工做。
• 7 當獲得真正的視圖對象後,DispatcherServlet會利用視圖對象對模型數據進行渲染。
• 8 客戶端獲得響應,多是一個普通的HTML頁面,也能夠是XML或JSON字符串,還能夠是一張圖片或者一個PDF文件。