Spring常見面試題

BeanFactory和ApplicationContext有什么區(qū)別

1、BeanFactory可以理解為含有bean集合的工廠類仆百。BeanFactory包含了bean的定義染坯,以便在接收到客戶端請求時將對應的bean實例化。
2、BeanFactory還能咋子實例化對象時生成協(xié)作類之間的關系伦吠。
   此舉將bean自身和bean客戶端的配置中解放出來根暑。BeanFactory還包含了bean生命周期的控制,調(diào)用客戶端的初始化方法和銷毀方法贮预。

從表面上看贝室,applicationContext和BeanFactory一樣具有bean的定義、bean關聯(lián)關系設置仿吞,根據(jù)請求分發(fā)bean的功能滑频。
但applicationContext在此基礎上還提供了其他功能
  1)提供了支持國際化的文本消息
  2)統(tǒng)一的資源文件讀取方式
  3)已在監(jiān)聽中注冊的bean的事件

Spring Bean的生命周期

SpringBean的生命周期簡單易懂。當一個bean實例被初始化時唤冈,需要執(zhí)行一系列的初始化操作以達到可以用狀態(tài)峡迷。
同樣的,當一個bean不再被調(diào)用時需要進行相關的析構操作你虹,并從bean容器中移除绘搞。  
SpringBeanFactory負責管理在spring容器中被創(chuàng)建的bean的生命周期。Bean的生命周期由兩組回調(diào)方法組成傅物。
1)初始化之后調(diào)用的回調(diào)方法
2)銷毀之前調(diào)用的回調(diào)方法

Spring框架提供了一下四種方式來管理bean的生命周期事件:
1)InitializingBean和DisposableBean回調(diào)接口
2)針對特殊行為的其他Aware接口
3)Bean配置文件中的Custom init()方法和destroy()方法
4)@PostConstruct和@PreDestory注解方式

SpringIOC如何實現(xiàn)

Spring中的org.springframework.beans包和org.springframework.context包構成了Spring框架IoC容器的基礎夯辖。
BeanFactory接口提供了一個先進的配置機制,使得任何類型的對象的配置成為可能董饰。
ApplicationContext接口對BeanFactory進行了擴展蒿褂,在BeanFactory的基礎上添加了其他功能
比如Spring與AOP更容易繼承圆米,也提供了處理國際化的的message resource的機制、事務傳播以及應用層的特別配置啄栓,比如針對Web應用的WebApplicationContext娄帖。
org.springframework.beans.factory.BeanFactory是SpringIoC容器的具體實現(xiàn),用來包裝和管理前面提到的各種bean昙楚。BeanFactory接口是SpringIoC容器的核心接口近速。

說說SpringAOP

面向切面編程,在我們的應用中桂肌,經(jīng)常需要做一些事情数焊,但是這些事情與核心業(yè)務無關,比如用日志記錄所有update方法的執(zhí)行時間崎场、操作人等信息佩耳。

通過SpringAOP技術,就是可以在不該核心業(yè)務代碼的情況下完成該需求谭跨。

SpringAOP的實現(xiàn)原理

SpringAOP的動態(tài)代理主要有兩種方式干厚,JDK動態(tài)代理和CGLIB動態(tài)代理。JDK動態(tài)代理通過反射來接收被代理的類螃宙,并且要求被代理的類必須實現(xiàn)一個接口
JDK動態(tài)代理的核心是InvocationHandler接口和Proxy類蛮瞄。

如果目標類沒有實現(xiàn)接口,那么SpringAOP會選擇使用CGLIB來動態(tài)代理目標類谆扎。CGLIB是一個代碼生成累哭挂捅,可以在運行時動態(tài)生成某個類的子類
注意,CGLIB是通過繼承的方式做的動態(tài)代理堂湖,因此如果某個類被標記為final闲先,則無法使用CGLIB做動態(tài)代理。

動態(tài)代理

JDK動態(tài)代理和委托類都要實現(xiàn)同一個接口无蜂。也就是說只有實現(xiàn)了某個接口的類可以使用Java的動態(tài)代理機制伺糠。
但是實際使用中并不是遇到的所有類都會實現(xiàn)一個接口。因此對于沒有實現(xiàn)接口的類斥季,就不能使用該機制
而CGLIB可實現(xiàn)對類的動態(tài)代理训桶。

Spring事務實現(xiàn)方式

1、編碼方式
  通過編碼方式實現(xiàn)事務酣倾,即類似于JDBC編程實現(xiàn)事務管理
2舵揭、聲明式事務管理,通過xm或注解方式躁锡,將事務規(guī)則應用到業(yè)務邏輯中
  1)基于xml配置文件方式
  2)在業(yè)務方法上進行@Transaction注解

Spring事務底層原理

1午绳、劃分處理單元——IOC
  由于Spring解決的問題是對單個數(shù)據(jù)庫進行局部事務處理的,具體的實現(xiàn):
  首先用spring中的IOC劃分了事務處理單元稚铣,并且將對事務的各種配置放到了IOC容器中(設置事務管理器箱叁,設置事務的傳播特性及隔離級別)
2、AOP攔截需要進行事務出來的類
  Spring事務處理模塊是通過AOP功能來實現(xiàn)聲明式事務處理惕医,
  具體操作(比如事務實行的配置和讀取,事務對象的抽象),用TransactionProxyFactoryBean接口來使用AOP功能浇借,生成proxy代理對象
  通過TransactionInterceptor完成對代理方法的攔截读慎,將事務處理的功能編織到攔截方法中。
  讀取ioc容器中事務配置屬性峡钓,轉化為spring事務處理需要的內(nèi)部數(shù)據(jù)結構妓笙,轉化為TransactionAttribute的數(shù)據(jù)對象
3、對事務處理實現(xiàn)(事務的生存能岩、提交寞宫、回滾、掛起)
  spring委托給具體的事務處理器實現(xiàn)拉鹃,實現(xiàn)了一個抽象和適配辈赋。
  適配的具體事務處理器:DataSource數(shù)據(jù)源支持、Hibernate數(shù)據(jù)源事務處理支持膏燕、JDO數(shù)據(jù)源事務處理支持钥屈,JPA、JTA數(shù)據(jù)源事務處理支持坝辫。
  這些支持都是通過設計PlateformTransactionManager篷就、AbstractPlateformTransaction一系列事務處理的支持。
  為了常用數(shù)據(jù)源支持提供了一系列的TransactionManager近忙。
4竭业、結合
  TransactionPlateManager實現(xiàn)了TransactionInterception接口,讓其與TransactionProxyFactoryBean結合起來银锻,形成Spring聲明式事務處理的設計體系永品。

如果自定義注解實現(xiàn)功能

創(chuàng)建自定義注解和創(chuàng)建一個接口相似,但是注解的 interface 關鍵字需要以@符號開頭击纬。
注解方法不能帶有參數(shù)鼎姐;
注解方法返回值類型限定為:基本類型、String更振、Enums炕桨、Annotation 或者是這些類型的
數(shù)組;
注解方法可以有默認值肯腕;
注解本身能夠包含元注解献宫,元注解被用來注解其它注解。

SpringMVC運行流程

1实撒、springmvc將所有請求都提交給DispatcherServlet姊途,它會委托應用系統(tǒng)的其他模塊負責對請求進行真正的處理工作涉瘾。
2、DispatherServlet查詢一個或多個handlerMapping捷兰,找到處理請求的Controller
3立叛、DispatherServlet將請求提交到目標Controller
4、Controller進行業(yè)務邏輯處理后贡茅,會返回一個ModelAndView
5秘蛇、DispatherServlet查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象
6顶考、視圖對象負責渲染返回給客戶端

SpringMVC啟動流程

1赁还、在web.xml文件中給SpringMVC的Servlet配置了load-on-startup,所以程序啟動的時候會初始化SpringmVC
2驹沿、在httpServletBean中將配置的contextConifgLocation屬性設置到servlet中
3艘策、然后在Frameworkservlet中創(chuàng)建了WebApplicationContext
4、DispatherServlet根據(jù)ContextConfigLocation配置classPath下的xml文件初始化進行SpringMVC總的組件渊季。

Spring的單例實現(xiàn)原理

Spring對Bean實例的創(chuàng)建是采用單例注冊表的方式進行實現(xiàn)的柬焕,而這個注冊表的緩存是ConcurrentHashMap對象

Spring框架中用到了哪些設計模式

1、代理模式:在AOP和remoting中被用的比較多
2梭域、單例模式:在spring配置文件中定義的bena默認為單例模式
3斑举、模版方法:用來解決代碼重復的問題。比如RestTemplate病涨、JmsTemplate富玷、JpaTemlate
4、前端控制器:Spring提供了DispatherServlet來對請求進行分發(fā)
5既穆、視圖幫助(ViewHelper):Spring提供了一系列的JSP標簽赎懦,高效宏來輔助將分散的代碼整合在視圖里。
6幻工、依賴注入:貫穿BeanFactory/ApplcationContext接口的核心理念
7励两、工廠模式:BeanFactory用來創(chuàng)建對象的實例

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市囊颅,隨后出現(xiàn)的幾起案子当悔,更是在濱河造成了極大的恐慌,老刑警劉巖踢代,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盲憎,死亡現(xiàn)場離奇詭異,居然都是意外死亡胳挎,警方通過查閱死者的電腦和手機饼疙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慕爬,“玉大人窑眯,你說我怎么就攤上這事屏积。” “怎么了磅甩?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵肾请,是天一觀的道長。 經(jīng)常有香客問我更胖,道長,這世上最難降的妖魔是什么隔显? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任却妨,我火速辦了婚禮,結果婚禮上括眠,老公的妹妹穿的比我還像新娘彪标。我一直安慰自己,他們只是感情好掷豺,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布捞烟。 她就那樣靜靜地躺著,像睡著了一般当船。 火紅的嫁衣襯著肌膚如雪题画。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天德频,我揣著相機與錄音苍息,去河邊找鬼。 笑死壹置,一個胖子當著我的面吹牛竞思,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钞护,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼盖喷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了难咕?” 一聲冷哼從身側響起课梳,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎余佃,沒想到半個月后惦界,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡咙冗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年沾歪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雾消。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡灾搏,死狀恐怖挫望,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狂窑,我是刑警寧澤媳板,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站泉哈,受9級特大地震影響蛉幸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜丛晦,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一奕纫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧烫沙,春花似錦匹层、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瘸爽,卻和暖如春您访,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背剪决。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工洋只, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人昼捍。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓识虚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親妒茬。 傳聞我的和親對象是個殘疾皇子担锤,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容