Spring是一個(gè)輕量級(jí)的IOC和AOP容器框架,是為Java應(yīng)用程序提供基礎(chǔ)性服務(wù)的一套框架,目的是用于簡(jiǎn)化企業(yè)應(yīng)用程序的開發(fā)。隨著Spring框架在企業(yè)中的廣泛應(yīng)用,Java程序員在面試過程中也經(jīng)常被提問對(duì)Spring的掌握。以下是小編整理的Spring面試題解析,希望能夠給大家?guī)?lái)幫助。
Spring的優(yōu)點(diǎn)?
1)spring屬于低侵入式設(shè)計(jì),代碼的污染極低;
2)spring的DI機(jī)制將對(duì)象之間的依賴關(guān)系交由框架處理,減低組件的耦合性;
3)Spring提供了AOP技術(shù),支持將一些通用任務(wù),如安全、事務(wù)、日志、權(quán)限等進(jìn)行集中式管理,從而提供更好的復(fù)用;
4)spring對(duì)于主流的應(yīng)用框架提供了集成支持。
IOC是什么?
IOC(InversionOfControll,控制反轉(zhuǎn))是一種設(shè)計(jì)思想,將原本在程序中手動(dòng)創(chuàng)建對(duì)象的控制權(quán),交由給Spring框架來(lái)管理。IOC容器是Spring用來(lái)實(shí)現(xiàn)IOC的載體,IOC容器實(shí)際上就是一個(gè)Map(key、value),Map中存放的是各種對(duì)象。
這樣可以很大程度上簡(jiǎn)化應(yīng)用的開發(fā),把應(yīng)用從復(fù)雜的依賴關(guān)系中解放出來(lái)。IOC容器就像是一個(gè)工廠,當(dāng)需要?jiǎng)?chuàng)建一個(gè)對(duì)象,只需要配置好配置文件/注解即可,不用考慮對(duì)象是如何被創(chuàng)建出來(lái)的,大大增加了項(xiàng)目的可維護(hù)性且降低了開發(fā)難度。
AOP是什么?
AOP(Aspect-OrientedProgramming,面向切面編程)能夠?qū)⒛切┡c業(yè)務(wù)無(wú)關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯或責(zé)任(例如事務(wù)處理、日志管理、權(quán)限控制等)封裝起來(lái),便于減少系統(tǒng)的重復(fù)代碼,降低模塊間的耦合度,并有利于未來(lái)的可擴(kuò)展性和可維護(hù)性。使用AOP之后我們可以把一些通用功能抽象出來(lái),在需要用到的地方直接使用即可,這樣可以大大簡(jiǎn)化代碼量,提高了系統(tǒng)的擴(kuò)展性。
SpringAOP是基于動(dòng)態(tài)代理的,如果要代理的對(duì)象實(shí)現(xiàn)了某個(gè)接口,那么SpringAOP就會(huì)使用JDK動(dòng)態(tài)代理去創(chuàng)建代理對(duì)象;而對(duì)于沒有實(shí)現(xiàn)接口的對(duì)象,就無(wú)法使用JDK動(dòng)態(tài)代理,轉(zhuǎn)而使用CGlib動(dòng)態(tài)代理生成一個(gè)被代理對(duì)象的子類來(lái)作為代理。
BeanFactory和ApplicationContext有什么區(qū)別?
1)BeanFactory是Spring里面最底層的接口,包含了各種Bean的定義,讀取bean配置文檔,管理bean的加載、實(shí)例化,控制bean的生命周期,維護(hù)bean之間的依賴關(guān)系。ApplicationContext接口作為BeanFactory的派生,除了提供BeanFactory所具有的功能外,還提供了更完整的框架功能。
2)BeanFactroy采用的是延遲加載形式來(lái)注入Bean的,即只有在使用到某個(gè)Bean時(shí)(調(diào)用getBean()),才對(duì)該Bean進(jìn)行加載實(shí)例化。ApplicationContext是在容器啟動(dòng)時(shí),一次性創(chuàng)建了所有的Bean。這樣在容器啟動(dòng)時(shí),我們就可以發(fā)現(xiàn)Spring中存在的配置錯(cuò)誤,這樣有利于檢查所依賴屬性是否注。
3)BeanFactory通常以編程的方式被創(chuàng)建,ApplicationContext還能以聲明的方式創(chuàng)建,如使用ContextLoader。
4)BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但兩者之間的區(qū)別是:BeanFactory需要手動(dòng)注冊(cè),而ApplicationContext則是自動(dòng)注冊(cè)。
SpringAOP/AspectJAOP的區(qū)別?
1)SpringAOP屬于運(yùn)行時(shí)增強(qiáng),而AspectJ是編譯時(shí)增強(qiáng);
2)SpringAOP基于代理(Proxying),而AspectJ基于字節(jié)碼操作(BytecodeManipulation);
3)AspectJ相比于SpringAOP功能更加強(qiáng)大,但是SpringAOP相對(duì)來(lái)說(shuō)更簡(jiǎn)單。如果切面比較少,那么兩者性能差異不大。但是,當(dāng)切面太多的話,最好選擇AspectJ,它比SpringAOP快很多。
Spring支持幾種bean的作用域?
1)singleton:默認(rèn),每個(gè)容器中只有一個(gè)bean的實(shí)例,單例的模式由BeanFactory自身來(lái)維護(hù)。
2)prototype:為每一個(gè)bean請(qǐng)求提供一個(gè)實(shí)例。
3)request:為每一個(gè)網(wǎng)絡(luò)請(qǐng)求創(chuàng)建一個(gè)實(shí)例,在請(qǐng)求完成以后,bean會(huì)失效并被垃圾回收器回收。
4)session:與request范圍類似,確保每個(gè)session中有一個(gè)bean的實(shí)例,在session過期后,bean會(huì)隨之失效。
5)global-session:全局作用域,global-session和Portlet應(yīng)用相關(guān)。當(dāng)你的應(yīng)用部署在Portlet容器中工作時(shí),它包含很多portlet。如果你想要聲明讓所有的portlet共用全局的存儲(chǔ)變量的話,那么這全局變量需要存儲(chǔ)在global-session中。全局作用域與Servlet中的session作用域效果相同。
當(dāng)然,不同的企業(yè)對(duì)于求職者的技能需求也會(huì)有所不同,考察的重點(diǎn)也不盡相同的。
以上就是天津卓眾教育Java培訓(xùn)機(jī)構(gòu)小編介紹的“Java框架面試題總結(jié)-Spring框架面試”的內(nèi)容,希望對(duì)大家有幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)推薦
最新最全java面試題及答案(初級(jí)到高級(jí))
史上最全的中高級(jí)JAVA工程師面試題及答案匯總
Java高級(jí)開發(fā)工程師面試題
2019史上最全java面試題題庫(kù)大全800題
哪有資深java工程師面試題