這篇文章給大家分享的是有關(guān)Spring的面試題有哪些的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
成都創(chuàng)新互聯(lián)致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營(yíng)銷,提供做網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)站開(kāi)發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營(yíng)銷、重慶小程序開(kāi)發(fā)公司、公眾號(hào)商城、等建站開(kāi)發(fā),成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢(shì)。一、什么是Spring框架?Spring框架有哪些主要模塊?
Spring框架是一個(gè)為Java應(yīng)用程序的開(kāi)發(fā)提供了綜合、廣泛的基礎(chǔ)性支持的Java平臺(tái)。Spring幫助開(kāi)發(fā)者解決了開(kāi)發(fā)中基礎(chǔ)性的問(wèn)題,使得開(kāi)發(fā)人員可以專注于應(yīng)用程序的開(kāi)發(fā)。
Spring框架本身亦是按照設(shè)計(jì)模式精心打造,這使得我們可以在開(kāi)發(fā)環(huán)境中安心的集成Spring框架,不必?fù)?dān)心Spring是如何在后臺(tái)進(jìn)行工作的。
Spring框架至今已集成了20多個(gè)模塊。這些模塊主要被分如下圖所示的核心容器、數(shù)據(jù)訪問(wèn)/集成,、Web、AOP(面向切面編程)、工具、消息和測(cè)試模塊。
二、使用Spring框架能帶來(lái)哪些好處?
下面列舉了一些使用Spring框架帶來(lái)的主要好處:
1、Dependency Injection(DI) 方法使得構(gòu)造器和JavaBean properties文件中的依賴關(guān)系一目了然。
2、與EJB容器相比較,IoC容器更加趨向于輕量級(jí)。這樣一來(lái)IoC容器在有限的內(nèi)存和CPU資源的情況下進(jìn)行應(yīng)用程序的開(kāi)發(fā)和發(fā)布就變得十分有利。
3、Spring并沒(méi)有閉門造車,Spring利用了已有的技術(shù)比如ORM框架、logging框架、J2EE、Quartz和JDK Timer,以及其他視圖技術(shù)。
4、Spring框架是按照模塊的形式來(lái)組織的。由包和類的編號(hào)就可以看出其所屬的模塊,開(kāi)發(fā)者僅僅需要選用他們需要的模塊即可。
5、要測(cè)試一項(xiàng)用Spring開(kāi)發(fā)的應(yīng)用程序十分簡(jiǎn)單,因?yàn)闇y(cè)試相關(guān)的環(huán)境代碼都已經(jīng)囊括在框架中了。更加簡(jiǎn)單的是,利用JavaBean形式的POJO類,可以很方便的利用依賴注入來(lái)寫入測(cè)試數(shù)據(jù)。
6、Spring的Web框架亦是一個(gè)精心設(shè)計(jì)的Web MVC框架,為開(kāi)發(fā)者們?cè)趙eb框架的選擇上提供了一個(gè)除了主流框架比如Struts、過(guò)度設(shè)計(jì)的、不流行web框架的以外的有力選項(xiàng)。
7、Spring提供了一個(gè)便捷的事務(wù)管理接口,適用于小型的本地事物處理(比如在單DB的環(huán)境下)和復(fù)雜的共同事物處理(比如利用JTA的復(fù)雜DB環(huán)境)。
三、什么是控制反轉(zhuǎn)(IOC)?什么是依賴注入?
1、控制反轉(zhuǎn)是應(yīng)用于軟件工程領(lǐng)域中的,在運(yùn)行時(shí)被裝配器對(duì)象來(lái)綁定耦合對(duì)象的一種編程技巧,對(duì)象之間耦合關(guān)系在編譯時(shí)通常是未知的。
在傳統(tǒng)的編程方式中,業(yè)務(wù)邏輯的流程是由應(yīng)用程序中的早已被設(shè)定好關(guān)聯(lián)關(guān)系的對(duì)象來(lái)決定的。
在使用控制反轉(zhuǎn)的情況下,業(yè)務(wù)邏輯的流程是由對(duì)象關(guān)系圖來(lái)決定的,該對(duì)象關(guān)系圖由裝配器負(fù)責(zé)實(shí)例化,這種實(shí)現(xiàn)方式還可以將對(duì)象之間的關(guān)聯(lián)關(guān)系的定義抽象化。而綁定的過(guò)程是通過(guò)“依賴注入”實(shí)現(xiàn)的。
2、控制反轉(zhuǎn)是一種以給予應(yīng)用程序中目標(biāo)組件更多控制為目的設(shè)計(jì)范式,并在我們的實(shí)際工作中起到了有效的作用。
3、依賴注入是在編譯階段尚未知所需的功能是來(lái)自哪個(gè)的類的情況下,將其他對(duì)象所依賴的功能對(duì)象實(shí)例化的模式。
這就需要一種機(jī)制用來(lái)激活相應(yīng)的組件以提供特定的功能,所以依賴注入是控制反轉(zhuǎn)的基礎(chǔ)。否則如果在組件不受框架控制的情況下,框架又怎么知道要?jiǎng)?chuàng)建哪個(gè)組件?
4、在Java中依然注入有以下三種實(shí)現(xiàn)方式:
1)構(gòu)造器注入;
2)Setter方法注入;
3)接口注入;
四、請(qǐng)解釋下Spring框架中的IoC?
Spring中的 org.springframework.beans 包和 org.springframework.context包構(gòu)成了Spring框架IoC容器的基礎(chǔ)。
BeanFactory接口提供了一個(gè)先進(jìn)的配置機(jī)制,使得任何類型的對(duì)象的配置成為可能。ApplicationContex接口對(duì)BeanFactory(是一個(gè)子接口)進(jìn)行了擴(kuò)展.
在BeanFactory的基礎(chǔ)上添加了其他功能,比如與Spring的AOP更容易集成,也提供了處理message resource的機(jī)制(用于國(guó)際化)、事件傳播以及應(yīng)用層的特別配置,比如針對(duì)Web應(yīng)用的WebApplicationContext。
五、BeanFactory和ApplicationContext有什么區(qū)別?
BeanFactory 可以理解為含有bean集合的工廠類。BeanFactory 包含了種bean的定義,以便在接收到客戶端請(qǐng)求時(shí)將對(duì)應(yīng)的bean實(shí)例化。
BeanFactory還能在實(shí)例化對(duì)象的時(shí)生成協(xié)作類之間的關(guān)系。此舉將bean自身與bean客戶端的配置中解放出來(lái)。BeanFactory還包含了bean生命周期的控制,調(diào)用客戶端的初始化方法(initialization methods)和銷毀方法(destruction methods)。
從表面上看,application context如同bean factory一樣具有bean定義、bean關(guān)聯(lián)關(guān)系的設(shè)置,根據(jù)請(qǐng)求分發(fā)bean的功能。但application context在此基礎(chǔ)上還提供了其他的功能:
1)提供了支持國(guó)際化的文本消息;
2)統(tǒng)一的資源文件讀取方式;
3)已在監(jiān)聽(tīng)器中注冊(cè)的bean的事件;
六、Spring有幾種配置方式?
將Spring配置到應(yīng)用開(kāi)發(fā)中有以下三種方式:
1)基于XML的配置
2)基于注解的配置
3)基于Java的配置
七、如何用基于XML配置的方式配置Spring?
在Spring框架中,依賴和服務(wù)需要在專門的配置文件來(lái)實(shí)現(xiàn),我常用的XML格式的配置文件。這些配置文件的格式通常用開(kāi)頭,然后一系列的bean定義和專門的應(yīng)用配置選項(xiàng)組成。
SpringXML配置的主要目的時(shí)候是使所有的Spring組件都可以用xml文件的形式來(lái)進(jìn)行配置。這意味著不會(huì)出現(xiàn)其他的Spring配置類型(比如聲明的方式或基于Java Class的配置方式)
Spring的XML配置方式是使用被Spring命名空間的所支持的一系列的XML標(biāo)簽來(lái)實(shí)現(xiàn)的。Spring有以下主要的命名空間:context、beans、jdbc、tx、aop、mvc和aso。
八、怎樣用注解的方式配置Spring?
Spring在2.5版本以后開(kāi)始支持用注解的方式來(lái)配置依賴注入??梢杂米⒔獾姆绞絹?lái)替代XML方式的bean描述,可以將bean描述轉(zhuǎn)移到組件類的內(nèi)部,只需要在相關(guān)類上、方法上或者字段聲明上使用注解即可。
注解注入將會(huì)被容器在XML注入之前被處理,所以后者會(huì)覆蓋掉前者對(duì)于同一個(gè)屬性的處理結(jié)果。
注解裝配在Spring中是默認(rèn)關(guān)閉的。所以需要在Spring文件中配置一下才能使用基于注解的裝配模式。如果你想要在你的應(yīng)用程序中使用關(guān)于注解的方法的話,請(qǐng)參考如下的配置。
在 標(biāo)簽配置完成以后,就可以用注解的方式在Spring中向?qū)傩浴⒎椒ê蜆?gòu)造方法中自動(dòng)裝配變量。
下面是幾種比較重要的注解類型:
1)@Required:該注解應(yīng)用于設(shè)值方法。
2)@Autowired:該注解應(yīng)用于有值設(shè)值方法、非設(shè)值方法、構(gòu)造方法和變量。
3)@Qualifier:該注解和@Autowired注解搭配使用,用于消除特定bean自動(dòng)裝配的歧義。
4)JSR-250 Annotations:Spring支持基于JSR-250 注解的以下注解,@Resource、@PostConstruct 和 @PreDestroy。
九、請(qǐng)解釋Spring Bean的生命周期
Spring Bean的生命周期簡(jiǎn)單易懂。在一個(gè)bean實(shí)例被初始化時(shí),需要執(zhí)行一系列的初始化操作以達(dá)到可用的狀態(tài)。
同樣的,當(dāng)一個(gè)bean不在被調(diào)用時(shí)需要進(jìn)行相關(guān)的析構(gòu)操作,并從bean容器中移除。
Spring bean factory 負(fù)責(zé)管理在spring容器中被創(chuàng)建的bean的生命周期。Bean的生命周期由兩組回調(diào)(call back)方法組成。
1)初始化之后調(diào)用的回調(diào)方法。
2)銷毀之前調(diào)用的回調(diào)方法。
Spring框架提供了以下四種方式來(lái)管理bean的生命周期事件:
1)InitializingBean和DisposableBean回調(diào)接口
2)針對(duì)特殊行為的其他Aware接口
3)Bean配置文件中的Custom init()方法和destroy()方法
4)@PostConstruct和@PreDestroy注解方式
使用customInit()和 customDestroy()方法管理bean生命周期的代碼樣例如下:
十、Spring Bean的作用域之間有什么區(qū)別?
Spring容器中的bean可以分為5個(gè)范圍。所有范圍的名稱都是自說(shuō)明的,但是為了避免混淆,還是讓我們來(lái)解釋一下:
1)singleton:這種bean范圍是默認(rèn)的,這種范圍確保不管接受到多少個(gè)請(qǐng)求,每個(gè)容器中只有一個(gè)bean的實(shí)例,單例的模式由bean factory自身來(lái)維護(hù)。
2)prototype:原形范圍與單例范圍相反,為每一個(gè)bean請(qǐng)求提供一個(gè)實(shí)例。
3)request:在請(qǐng)求bean范圍內(nèi)會(huì)每一個(gè)來(lái)自客戶端的網(wǎng)絡(luò)請(qǐng)求創(chuàng)建一個(gè)實(shí)例,在請(qǐng)求完成以后,bean會(huì)失效并被垃圾回收器回收。
4)Session:與請(qǐng)求范圍類似,確保每個(gè)session中有一個(gè)bean的實(shí)例,在session過(guò)期后,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作用域效果相同。
十一、什么是Spring beans?
Spring beans 是那些形成Spring應(yīng)用的主干的java對(duì)象。它們被Spring IOC容器初始化,裝配,和管理。這些beans通過(guò)容器中配置的元數(shù)據(jù)創(chuàng)建。比如,以XML文件中的形式定義。
Spring 框架定義的beans都是單件beans。在bean tag中有個(gè)屬性”singleton”,如果它被賦為TRUE,bean 就是單件,否則就是一個(gè) prototype bean。默認(rèn)是TRUE,所以所有在Spring框架中的beans 缺省都是單件。
十二、解釋Spring支持的幾種bean的作用域
Spring框架支持以下五種bean的作用域:
1)singleton : bean在每個(gè)Spring ioc 容器中只有一個(gè)實(shí)例。
2)prototype:一個(gè)bean的定義可以有多個(gè)實(shí)例。
3)request:每次http請(qǐng)求都會(huì)創(chuàng)建一個(gè)bean,該作用域僅在基于web的Spring ApplicationContext情形下有效。
4)session:在一個(gè)HTTP Session中,一個(gè)bean定義對(duì)應(yīng)一個(gè)實(shí)例。該作用域僅在基于web的Spring ApplicationContext情形下有效。
5)global-session:在一個(gè)全局的HTTP Session中,一個(gè)bean定義對(duì)應(yīng)一個(gè)實(shí)例。該作用域僅在基于web的Spring ApplicationContext情形下有效。
缺省的Spring bean 的作用域是Singleton。
十三、解釋Spring框架中bean的生命周期
Spring容器 從XML 文件中讀取bean的定義,并實(shí)例化bean。
Spring根據(jù)bean的定義填充所有的屬性。
如果bean實(shí)現(xiàn)了BeanNameAware 接口,Spring 傳遞bean 的ID 到 setBeanName方法。
如果Bean 實(shí)現(xiàn)了 BeanFactoryAware 接口, Spring傳遞beanfactory 給setBeanFactory 方法。
如果有任何與bean相關(guān)聯(lián)的BeanPostProcessors,Spring會(huì)在postProcesserBeforeInitialization()方法內(nèi)調(diào)用它們。
如果bean實(shí)現(xiàn)IntializingBean了,調(diào)用它的afterPropertySet方法,如果bean聲明了初始化方法,調(diào)用此初始化方法。
如果有BeanPostProcessors 和bean 關(guān)聯(lián),這些bean的postProcessAfterInitialization() 方法將被調(diào)用。
如果bean實(shí)現(xiàn)了 DisposableBean,它將調(diào)用destroy()方法。
十四、哪些是重要的bean生命周期方法? 你能重載它們嗎?
有兩個(gè)重要的bean 生命周期方法,第一個(gè)是setup , 它是在容器加載bean的時(shí)候被調(diào)用。第二個(gè)方法是 teardown 它是在容器卸載類的時(shí)候被調(diào)用。
The bean 標(biāo)簽有兩個(gè)重要的屬性(init-method和destroy-method)。用它們你可以自己定制初始化和注銷方法。它們也有相應(yīng)的注解(@PostConstruct和@PreDestroy)。
十五、什么是Spring的內(nèi)部bean?
當(dāng)一個(gè)bean僅被用作另一個(gè)bean的屬性時(shí),它能被聲明為一個(gè)內(nèi)部bean,為了定義inner bean,在Spring 的 基于XML的 配置元數(shù)據(jù)中,可以在或 元素內(nèi)使用元素,內(nèi)部bean通常是匿名的,它們的Scope一般是prototype。
十六、在 Spring中如何注入一個(gè)java集合?
Spring提供以下幾種集合的配置元素:
類型用于注入一列值,允許有相同的值。
類型用于注入一組值,不允許有相同的值。
類型用于注入一組鍵值對(duì),鍵和值都可以為任意類型。
類型用于注入一組鍵值對(duì),鍵和值都只能為String類型。
十七、什么是bean裝配?
裝配,或bean 裝配是指在Spring 容器中把bean組裝到一起,前提是容器需要知道bean的依賴關(guān)系,如何通過(guò)依賴注入來(lái)把它們裝配到一起。
十八、什么是bean的自動(dòng)裝配?
Spring 容器能夠自動(dòng)裝配相互合作的bean,這意味著容器不需要和配置,能通過(guò)Bean工廠自動(dòng)處理bean之間的協(xié)作。
感謝各位的閱讀!關(guān)于“Spring的面試題有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!