spring(一)

  • 請談一談Spring中自動裝配的方式有哪些?

考察點:spring框架
參考回答:
  • no:不進行自動裝配懈涛,手動設置Bean的依賴關系汪榔。
  • byName:根據(jù)Bean的名字進行自動裝配哎榴。
  • byType:根據(jù)Bean的類型進行自動裝配。
  • constructor:類似于byType,不過是應用于構造器的參數(shù)溢豆,如果正好有一個Bean與構造器的參數(shù)類型相同則可以自動裝配烦粒,否則會導致錯誤。
  • autodetect:如果有默認的構造器蚤氏,則通過constructor的方式進行自動裝配甘耿,否則使用byType的方式進行自動裝配。

自動裝配沒有自定義裝配方式那么精確竿滨,而且不能自動裝配簡單屬性(基本類型佳恬、字符串等),在使用時應注意于游。

  • 請問Spring中Bean的作用域有哪些毁葱?

考察點:框架
參考回答:

在Spring的早期版本中,僅有兩個作用域:singleton和prototype贰剥,前者表示Bean以單例的方式存在倾剿;后者表示每次從容器中調用Bean時,都會返回一個新的實例蚌成,prototype通常翻譯為原型前痘。

設計模式中的創(chuàng)建型模式中也有一個原型模式凛捏,原型模式也是一個常用的模式,例如做一個室內(nèi)設計軟件际度,所有的素材都在工具箱中葵袭,而每次從工具箱中取出的都是素材對象的一個原型,可以通過對象克隆來實現(xiàn)原型模式乖菱。Spring 2.x中針對WebApplicationContext新增了3個作用域坡锡,分別是:request(每次HTTP請求都會創(chuàng)建一個新的Bean)、session(同一個HttpSession共享同一個Bean窒所,不同的HttpSession使用不同的Bean)和globalSession(同一個全局Session共享一個Bean)鹉勒。

單例模式和原型模式都是重要的設計模式。一般情況下吵取,無狀態(tài)或狀態(tài)不可變的類適合使用單例模式禽额。在傳統(tǒng)開發(fā)中,由于DAO持有Connection這個非線程安全對象因而沒有使用單例模式皮官;但在Spring環(huán)境下脯倒,所有DAO類對可以采用單例模式,因為Spring利用AOP和Java API中的ThreadLocal對非線程安全的對象進行了特殊處理捺氢。

  • 請問什么是IoC和DI藻丢?并且簡要說明一下DI是如何實現(xiàn)的?

考察點:控制反轉
參考回答:

IoC叫控制反轉摄乒,是Inversion of Control的縮寫悠反,DI(Dependency Injection)叫依賴注入,是對IoC更簡單的詮釋馍佑≌瘢控制反轉是把傳統(tǒng)上由程序代碼直接操控的對象的調用權交給容器,通過容器來實現(xiàn)對象組件的裝配和管理拭荤。所謂的"控制反轉"就是對組件對象控制權的轉移茵臭,從程序代碼本身轉移到了外部容器,由容器來創(chuàng)建對象并管理對象之間的依賴關系舅世。IoC體現(xiàn)了好萊塢原則 - "Don’t call me, we will call you"笼恰。依賴注入的基本原則是應用組件不應該負責查找資源或者其他依賴的協(xié)作對象。配置對象的工作應該由容器負責歇终,查找資源的邏輯應該從應用組件的代碼中抽取出來社证,交給容器來完成。DI是對IoC更準確的描述评凝,即組件之間的依賴關系由容器在運行期決定追葡,形象的來說,即由容器動態(tài)的將某種依賴關系注入到組件之中。

一個類A需要用到接口B中的方法宜肉,那么就需要為類A和接口B建立關聯(lián)或依賴關系匀钧,最原始的方法是在類A中創(chuàng)建一個接口B的實現(xiàn)類C的實例,但這種方法需要開發(fā)人員自行維護二者的依賴關系谬返,也就是說當依賴關系發(fā)生變動的時候需要修改代碼并重新構建整個系統(tǒng)之斯。如果通過一個容器來管理這些對象以及對象的依賴關系,則只需要在類A中定義好用于關聯(lián)接口B的方法(構造器或setter方法)遣铝,將類A和接口B的實現(xiàn)類C放入容器中佑刷,通過對容器的配置來實現(xiàn)二者的關聯(lián)。
依賴注入可以通過setter方法注入(設值注入)酿炸、構造器注入和接口注入三種方式來實現(xiàn)瘫絮,Spring支持setter注入和構造器注入,通常使用構造器注入來注入必須的依賴關系填硕,對于可選的依賴關系麦萤,則setter注入是更好的選擇,setter注入需要類提供無參構造器或者無參的靜態(tài)工廠方法來創(chuàng)建對象扁眯。

  • 請說明一下Spring中BeanFactory和ApplicationContext的區(qū)別是什么壮莹?

考察點:spring框架
參考回答:

概念:

BeanFactory:
BeanFactory是spring中比較原始,比較古老的Factory姻檀。因為比較古老命满,所以BeanFactory無法支持spring插件,例如:AOP施敢、Web應用等功能周荐。

ApplicationContext
ApplicationContext是BeanFactory的子類狭莱,因為古老的BeanFactory無法滿足不斷更新的spring的需求僵娃,于是ApplicationContext就基本上代替了BeanFactory的工作,以一種更面向框架的工作方式以及對上下文進行分層和實現(xiàn)繼承腋妙,并在這個基礎上對功能進行擴展:
<1>MessageSource, 提供國際化的消息訪問
<2>資源訪問(如URL和文件)
<3>事件傳遞
<4>Bean的自動裝配
<5>各種不同應用層的Context實現(xiàn)

區(qū)別:

<1>如果使用ApplicationContext默怨,如果配置的bean是singleton,那么不管你有沒有或想不想用它骤素,它都會被實例化匙睹。好處是可以預先加載,壞處是浪費內(nèi)存济竹。
<2>BeanFactory痕檬,當使用BeanFactory實例化對象時,配置的bean不會馬上被實例化送浊,而是等到你使用該bean的時候(getBean)才會被實例化梦谜。好處是節(jié)約內(nèi)存,壞處是速度比較慢。多用于移動設備的開發(fā)唁桩。
<3>沒有特殊要求的情況下闭树,應該使用ApplicationContext完成。因為BeanFactory能完成的事情荒澡,ApplicationContext都能完成报辱,并且提供了更多接近現(xiàn)在開發(fā)的功能。

  • 請說明一下springIOC原理是什么单山?如果你要實現(xiàn)IOC需要怎么做碍现?請簡單描述一下實現(xiàn)步驟?

考察點:spring
參考回答:

①IoC(Inversion of Control饥侵,控制倒轉)鸵赫。這是spring的核心,貫穿始終躏升。所謂IoC辩棒,對于spring框架來說,就是由spring來負責控制對象的生命周期和對象間的關系膨疏。

IoC的一個重點是在系統(tǒng)運行中一睁,動態(tài)的向某個對象提供它所需要的其他對象。這一點是通過DI(Dependency Injection佃却,依賴注入)來實現(xiàn)的者吁。比如對象A需要操作數(shù)據(jù)庫,以前我們總是要在A中自己編寫代碼來獲得一個Connection對象饲帅,有了 spring我們就只需要告訴spring复凳,A中需要一個Connection,至于這個Connection怎么構造灶泵,何時構造育八,A不需要知道。在系統(tǒng)運行時赦邻,spring會在適當?shù)臅r候制造一個Connection髓棋,然后像打針一樣,注射到A當中惶洲,這樣就完成了對各個對象之間關系的控制按声。A需要依賴 Connection才能正常運行,而這個Connection是由spring注入到A中的恬吕,依賴注入的名字就這么來的签则。那么DI是如何實現(xiàn)的呢? Java 1.3之后一個重要特征是反射(reflection)铐料,它允許程序在運行的時候動態(tài)的生成對象渐裂、執(zhí)行對象的方法侨颈、改變對象的屬性,spring就是通過反射來實現(xiàn)注入的芯义。

舉個簡單的例子哈垢,我們找女朋友常見的情況是,我們到處去看哪里有長得漂亮身材又好的女孩子扛拨,然后打聽她們的興趣愛好耘分、qq號、電話號绑警、ip號求泰、iq號………,想辦法認識她們计盒,投其所好送其所要渴频,這個過程是復雜深奧的,我們必須自己設計和面對每個環(huán)節(jié)北启。傳統(tǒng)的程序開發(fā)也是如此卜朗,在一個對象中,如果要使用另外的對象咕村,就必須得到它(自己new一個场钉,或者從JNDI中查詢一個),使用完之后還要將對象銷毀(比如Connection等)懈涛,對象始終會和其他的接口或類藕合起來逛万。

②實現(xiàn)IOC的步驟

定義用來描述bean的配置的Java類

解析bean的配置,將bean的配置信息轉換為上面的BeanDefinition對象保存在內(nèi)存中批钠,spring中采用HashMap進行對象存儲宇植,其中會用到一些xml解析技術

遍歷存放BeanDefinition的HashMap對象,逐條取出BeanDefinition對象埋心,獲取bean的配置信息指郁,利用Java的反射機制實例化對象,將實例化后的對象保存在另外一個Map中即可踩窖。

  • 請簡單說明一下依賴注入的方式有哪幾種坡氯?以及這些方法如何使用晨横?

考察點:spring
參考回答:

1洋腮、Set注入 2、構造器注入 3手形、接口注入

  • 請說明一下@Controller和@RestController的區(qū)別是什么啥供?

考察點:spring
參考回答:

@RestController注解相當于@ResponseBody + @Controller合在一起的作用

  • 請問在以前的學習中有使用過Spring里面的注解嗎?如果有請談一下autowired 和resource區(qū)別是什么库糠?

考察點:Spring
參考回答:

1伙狐、共同點

兩者都可以寫在字段和setter方法上涮毫。兩者如果都寫在字段上,那么就不需要再寫setter方法贷屎。

2罢防、不同點

(1)@Autowired

@Autowired為Spring提供的注解,需要導入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入唉侄。

@Autowired注解是按照類型(byType)裝配依賴對象咒吐,默認情況下它要求依賴對象必須存在,如果允許null值属划,可以設置它的required屬性為false恬叹。如果我們想使用按照名稱(byName)來裝配,可以結合@Qualifier注解一起使用同眯。

(2)@Resource

@Resource默認按照ByName自動注入绽昼,由J2EE提供,需要導入包javax.annotation.Resource须蜗。@Resource有兩個重要的屬性:name和type硅确,而Spring將@Resource注解的name屬性解析為bean的名字,而type屬性則解析為bean的類型明肮。所以疏魏,如果使用name屬性,則使用byName的自動注入策略晤愧,而使用type屬性時則使用byType自動注入策略大莫。如果既不制定name也不制定type屬性,這時將通過反射機制使用byName自動注入策略官份。

  • 請介紹一下bean的生命周期

考察點:spring
參考回答:

Spring生命周期流程圖:

image
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末只厘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子舅巷,更是在濱河造成了極大的恐慌羔味,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钠右,死亡現(xiàn)場離奇詭異赋元,居然都是意外死亡,警方通過查閱死者的電腦和手機飒房,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門搁凸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人狠毯,你說我怎么就攤上這事护糖。” “怎么了嚼松?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵嫡良,是天一觀的道長锰扶。 經(jīng)常有香客問我,道長寝受,這世上最難降的妖魔是什么坷牛? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮很澄,結果婚禮上漓帅,老公的妹妹穿的比我還像新娘。我一直安慰自己痴怨,他們只是感情好忙干,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浪藻,像睡著了一般捐迫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上爱葵,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天施戴,我揣著相機與錄音,去河邊找鬼萌丈。 笑死赞哗,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的辆雾。 我是一名探鬼主播肪笋,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼度迂!你這毒婦竟也來了藤乙?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤惭墓,失蹤者是張志新(化名)和其女友劉穎坛梁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腊凶,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡划咐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了钧萍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片褐缠。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖划煮,靈堂內(nèi)的尸體忽然破棺而出送丰,到底是詐尸還是另有隱情缔俄,我是刑警寧澤弛秋,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布器躏,位于F島的核電站,受9級特大地震影響蟹略,放射性物質發(fā)生泄漏登失。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一挖炬、第九天 我趴在偏房一處隱蔽的房頂上張望揽浙。 院中可真熱鬧,春花似錦意敛、人聲如沸馅巷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钓猬。三九已至,卻和暖如春撩独,著一層夾襖步出監(jiān)牢的瞬間敞曹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工综膀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留澳迫,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓剧劝,卻偏偏與公主長得像橄登,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子讥此,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

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