三大框架面試題_第1頁(yè)
三大框架面試題_第2頁(yè)
三大框架面試題_第3頁(yè)
三大框架面試題_第4頁(yè)
三大框架面試題_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、I.Spring中Bean的生命周期1 .容器啟動(dòng),實(shí)例化所有實(shí)現(xiàn)了BeanFactoyPostProcessor接口的類。他會(huì)在任何普通Bean實(shí)例化之前加載.2 .實(shí)例化剩下的Bean,對(duì)這些Bean進(jìn)行依賴注入。3 .如果Bean有實(shí)現(xiàn)BeanNameAware的接口那么對(duì)這些Bean進(jìn)行調(diào)用4 .如果Bean有實(shí)現(xiàn)BeanFactoryAware接口的那么對(duì)這些Bean進(jìn)行調(diào)用5 .如果Bean有實(shí)現(xiàn)ApplicationContextAware接口的那么對(duì)這些Bean進(jìn)行調(diào)用6 .如果配置有實(shí)現(xiàn)BeanPostProcessor的Bean,那么調(diào)用它的postProcessBefor

2、eInitialization方法7 .如果Bean有實(shí)現(xiàn)InitializingBean接口那么對(duì)這些Bean進(jìn)行調(diào)用8 .如果Bean配置有init屬性,那么調(diào)用它屬性中設(shè)置的方法9 .如果配置有實(shí)現(xiàn)BeanPostProcessor的Bean,那么調(diào)用它的postProcessAfterInitialization方10.Bean正常使用11.調(diào)用DisposableBean接口的destory方法12.調(diào)用Bean定義的destory方法如果從大體上區(qū)分值分只為四個(gè)階段1.BeanFactoyPostProcessor實(shí)例化2.Bean實(shí)例化,然后通過(guò)某些BeanFactoyPostP

3、rocessor來(lái)進(jìn)行依賴注入3.BeanPostProcessor的調(diào)用.Spring內(nèi)置的BeanPostProcessor負(fù)責(zé)調(diào)用Bean實(shí)現(xiàn)的接口:BeanNameAware,BeanFactoryAware,ApplicationContextAware等等,等這些內(nèi)置的BeanPostProcessor調(diào)用完后才會(huì)調(diào)用自己配置的BeanPostProcessor4.Bean銷毀階段2.你對(duì)spring的理解是什么?1)開源框架2)IoC(控制反轉(zhuǎn)),將類的創(chuàng)建和依賴關(guān)系寫在配置文件里,由配置文件注入,實(shí)現(xiàn)了松耦合3)AOP將安全,事務(wù)等于程序邏輯相對(duì)獨(dú)立的功能抽取出來(lái),利用spri

4、ng的配置文件將這些功能插進(jìn)去,實(shí)現(xiàn)了按照方面編程,提高了復(fù)用性或者答概念Spring是一個(gè)輕型容器(light-weightcontainer),其核心是Bean工廠(BeanFactory),用以構(gòu)造我們所需要的M(Model)。在此基礎(chǔ)之上,Spring提供了AOP(Aspect-OrientedProgramming,面向?qū)用娴木幊蹋┑膶?shí)現(xiàn),用它來(lái)提供非管理環(huán)境下申明方式的事務(wù)、安全等服務(wù);對(duì)Bean工廠的擴(kuò)展ApplicationContext更加方便我們實(shí)現(xiàn)J2EE的應(yīng)用;DAO/ORM的實(shí)現(xiàn)方便我們進(jìn)行數(shù)據(jù)庫(kù)的開發(fā);WebMVC和SpringWeb提供了JavaWeb應(yīng)用的框架或

5、與其他流行的Web框架進(jìn)行集成。3.Spring框架有哪幾部分組成?Spring核心容器(Core):提供Spring框架的基本功能。核心容器的主要組件是BeanFactory,她是工廠模式的實(shí)現(xiàn)。BeanFactory使用控制反轉(zhuǎn)(Ioc)模式將應(yīng)用程序的配置和依賴性規(guī)范與實(shí)際的應(yīng)用代碼程序分開。SpringAOP:通過(guò)配置管理特性,SpringAOP模塊直接面向方面的編程功能集成到了Spring框架中,所以可以很容易的使Spring框架管理的任何對(duì)象支持AOPSpringAOP模塊為基于Spring的應(yīng)用程序中的對(duì)象提供了事務(wù)管理服務(wù)。通過(guò)使用SpringAOP,不用依賴于EJB組件,就可

6、以將聲明性事務(wù)管理集成到應(yīng)用程序中。SpringORM:Spring框架集成了若干ORM框架,從而提供了ORM的對(duì)象關(guān)系工具淇中包括JD。Hibernate、iBatis和TopLink。所有這些都遵從Spring的通用事務(wù)和DAO異常層結(jié)構(gòu)。SpringDAQJDBCDA。由象層提供了有意義的異常層次的結(jié)構(gòu),可用該結(jié)構(gòu)來(lái)管理異常處理和不同數(shù)據(jù)供應(yīng)商拋出的異常錯(cuò)誤信息。異常層次結(jié)構(gòu)簡(jiǎn)化了錯(cuò)誤處理,并且大大的降低了需要編寫的異常代碼數(shù)量(例如,打開和關(guān)系連接)。SpringDAO的面向JDBC的異常遵從通用的DAO異常層結(jié)構(gòu)。SpringWEB:Web上下文模塊建立在上下文模塊(Context)

7、的基礎(chǔ)之上,為基于Web服務(wù)的應(yīng)用程序提供了上下文的服務(wù)。所以Spring框架支持JakartaStruts的集成。Web模塊還簡(jiǎn)化了處理多部分請(qǐng)求及將請(qǐng)求參數(shù)綁定到域?qū)ο蟮墓ぷ?。Spring上下文(Context):Spring上下文是一個(gè)配置文件,向Spring框架提供上下文信息。Spring上下文包括企業(yè)服務(wù),例如JNDI、EJR電子郵件、國(guó)際化校驗(yàn)和調(diào)度功能。SpringMVC:Spring的MVC框架是一個(gè)全功能的構(gòu)建Web應(yīng)用程序的MVC實(shí)現(xiàn)。通過(guò)策略接口,MVC框架變成為高度可配置的,MVC容納的大量視圖技術(shù),包才JSRVelocity、Tiles、iText和Pol4.Stru

8、ts2基本工作過(guò)程1、客戶端初始化一個(gè)指向Servlet容器(例如Tomcat)的請(qǐng)求2、這個(gè)請(qǐng)求經(jīng)過(guò)一系列的過(guò)濾器(Filter)(這些過(guò)濾器中有一個(gè)叫做ActionContextCleanUp的可選過(guò)濾器,這個(gè)過(guò)濾器對(duì)于Struts2和其他框架的集成很有幫助,例如:SiteMeshPlugin);3、接著StrutsPrepareAndExecuteFilter被調(diào)用,StrutsPrepareAndExecuteFilter詢問ActionMapper來(lái)決定這個(gè)請(qǐng)求是否需要調(diào)用某個(gè)Action;4、如果ActionMapper決定需要調(diào)用某個(gè)Action,StrutsPrepareAnd

9、ExecuteFilter把請(qǐng)求的處理交給ActionProxy;5、ActionProxy通過(guò)ConfigurationManager詢問框架的配置文件,找到需要調(diào)用的Action類;6、ActionProxy創(chuàng)建一個(gè)ActionInvocation的實(shí)例。7、ActionInvocation實(shí)例使用命名模式來(lái)調(diào)用,在調(diào)用Action的過(guò)程前后,涉及到相關(guān)攔截器(Intercepter)的調(diào)用。8、一旦Action執(zhí)行完畢,ActionInvocation負(fù)責(zé)根據(jù)struts.xml中的配置找到對(duì)應(yīng)的返回結(jié)果。返回結(jié)果通常是(但不總是,也可能是另外的一個(gè)Action鏈)一個(gè)需要被表示的JSP

10、或者FreeMarker的模版。在表示的過(guò)程中可以使用Struts2框架中繼承的標(biāo)簽。在這個(gè)過(guò)程中需要涉及到ActionMapper。5.IOC的優(yōu)點(diǎn)是什么?ioc或依賴注入把應(yīng)用的代碼量降到最低。它使應(yīng)用容易測(cè)試,單元測(cè)試不再需要單例和JNDI查找機(jī)制。最小的代價(jià)和最小的侵入性使松散耦合得以實(shí)現(xiàn)。IOC容器支持加載服務(wù)時(shí)的俄漢式初始化和懶加載。6 .什么是Springbeans?Springbeans是那些形成Spring應(yīng)用的主干的java對(duì)象。它們被SpringIOC容器初始化,裝配,和管理。這些beans通過(guò)容器中配置的元數(shù)據(jù)創(chuàng)建。比如,以XML文件中bean/的形式定義。Spring

11、框架定義的beans都是單件beans。在beantag中有個(gè)屬性"singleton,如果它被賦為TRUE,bean就是單件,否則就是一個(gè)prototypebean。默認(rèn)是TRUE所以所有在Spring框架中的beans缺省都是單件。7,什么是Spring的MVC匡架Spring配備構(gòu)建Web應(yīng)用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成,如Struts,Spring的MVC框架用控制反轉(zhuǎn)把業(yè)務(wù)對(duì)象和控制邏輯清晰地隔離。它也允許以聲明的方式把請(qǐng)求參數(shù)和業(yè)務(wù)對(duì)象綁定。7 .spring提供了幾個(gè)關(guān)于事務(wù)處理的類TransactionDefinition/事務(wù)屬性

12、定義TranscationStatus代表了當(dāng)前的事務(wù),可以提交,回滾。PlatformTransactionManager這個(gè)是spring提供的用于管理事務(wù)的基礎(chǔ)接口,其下有一個(gè)實(shí)現(xiàn)的抽象類AbstractPlatformTransactionManager,我們使用的事務(wù)管理類例如DataSourceTransactionManager等都是這個(gè)類的子類。9.談?wù)刅alueStack.ValueStack貫穿整個(gè)Action的生命周期,保存在request域中,所以ValueStack和request的生命周期一樣,當(dāng)Struts2接受一個(gè)請(qǐng)求時(shí),會(huì)迅速創(chuàng)建ActionContext,V

13、alueStack,Action.然后把Action存放進(jìn)ValueStack,所以Action的實(shí)例變量可以被OGNL訪問。請(qǐng)求來(lái)的時(shí)候,Action>ValueStack的生命開始;請(qǐng)求結(jié)束,Action>ValueStack的生命結(jié)束,值棧是多實(shí)仞的,因?yàn)锳ction是多例的(和Servlet不一樣,Servelt是單例的),而每個(gè)Action都有一個(gè)對(duì)應(yīng)的值棧,Action對(duì)象默認(rèn)保存在棧頂;.ValueStack本質(zhì)上就是一個(gè)ArrayList(查看源代碼得到);,使用OGNL訪問值棧的內(nèi)容時(shí),不需要#號(hào),而訪問request>session>applicat

14、ion>attr時(shí),需要加#號(hào);.Struts2重寫了request的getAttribute方法,所以可以使用EL直接訪問值棧中的內(nèi)容10 .攔截器的生命周期與工作過(guò)程每個(gè)攔截器都是需要實(shí)現(xiàn)Interceptor接口> init():在攔截器被創(chuàng)建后立即被調(diào)用,它在攔截器的生命周期內(nèi)只被調(diào)用一次,可以在該方法中對(duì)相關(guān)資源進(jìn)行必要的初始化;> intercept(ActionInvocationinvocation):每攔截一個(gè)動(dòng)作請(qǐng)求,該方法就會(huì)被調(diào)用一次;> destroy:該方法將在攔截器被銷毀之前被調(diào)用,它在攔截器的生命周期內(nèi)也只被調(diào)用一次;11 .攔截器必須是

15、無(wú)狀態(tài)的這是因?yàn)閟truts2對(duì)每一個(gè)Action的請(qǐng)求使用的是同一個(gè)攔截器實(shí)例來(lái)攔截調(diào)用,如果攔截器有狀態(tài),在多個(gè)線程(客戶端的每個(gè)請(qǐng)求將由服務(wù)器端的一個(gè)線程來(lái)服務(wù))同時(shí)訪問一個(gè)攔截器實(shí)例的情況下,攔截器的狀態(tài)將不可預(yù)測(cè)。12 .自定義攔截器的實(shí)現(xiàn)方法實(shí)現(xiàn)Interceptor接口承Abstractinterceptor類繼承MethodFilterinterceptor類13 .Spring容器容器可以管理對(duì)象的生命周期,對(duì)象與對(duì)象之間的依賴關(guān)系,您可以使用一個(gè)配置文件(通常是XML),在上面定義好對(duì)象的名稱,如何產(chǎn)生(Prototype方式或Singleton方式),那個(gè)對(duì)象產(chǎn)生之后必須

16、設(shè)定成為某個(gè)對(duì)象的屬性等,在啟動(dòng)容器后,所有的對(duì)象都可以直接取用,不用編寫任何一行代碼來(lái)產(chǎn)生對(duì)象,或是建立對(duì)象與對(duì)象之間的依賴關(guān)系。14 .為何使用IoC有效地組織中間層對(duì)象有效的消除單例、工廠等模式的使用將面向接口編程做到實(shí)處使單元測(cè)試變得簡(jiǎn)單消除了依賴環(huán)境的查找和特定服務(wù)器的代碼代碼變得清晰,易于維護(hù)和擴(kuò)展代碼依賴于接口,易于復(fù)用便于看清組件之間的依賴關(guān)系便于團(tuán)隊(duì)分模塊開發(fā)15 .Bean是什么具有唯一id的SimpleObject由IoC容器管理其生命周期及其依賴關(guān)系簡(jiǎn)單地講,bean就是由Spring容器初始化、裝配及被管理的對(duì)象bean定義以及bean相互之間的依賴關(guān)系將通過(guò)配置元數(shù)

17、據(jù)來(lái)描述一般在XML文件中定義一16 .ApplicationContext與BeanFactory的區(qū)別基本的BeanFactory總是延遲加載Bean,直到第一次調(diào)用getBean("Beanid")方法請(qǐng)求Bean實(shí)例時(shí),BeanFactory才會(huì)創(chuàng)建這個(gè)Bean,而Applicationcontext在自身初始化時(shí)就一次性創(chuàng)建了所有的Bean,了解這一點(diǎn)是非常重要的,因?yàn)锳pplicationcontext在初始化時(shí)就能驗(yàn)證XML配置文件的正確性.而使用BeanFactory,直到調(diào)用getBean("Beanid")方法獲取Bean實(shí)例時(shí),才可

18、能會(huì)發(fā)現(xiàn)配置錯(cuò)誤而導(dǎo)致拋出異常17 .獲取Applicationcontext資源ClassPathResource:通過(guò)ClassPathResource以類路徑的方式進(jìn)行訪問;FileSystemResource:通過(guò)FileSystemResource以文件系統(tǒng)絕對(duì)路徑的方式進(jìn)行訪問;ServletContextResource:通過(guò)ServletContextResource以相對(duì)于Web應(yīng)用根目錄的方式進(jìn)行訪問;UrlResource通過(guò).URL來(lái)訪問資源,當(dāng)然它也支持File格式,如“巾le:18 .依賴注入的三種方式設(shè)置屬性注入set注入指的就是在接受注入的類中定義一個(gè)set方法

19、,并在參數(shù)中定義需要注入的元素。構(gòu)造注入構(gòu)造注入指的就是在接受注入的類中定義一個(gè)構(gòu)造方法,并在參數(shù)中定義需要注入的元素。接口注入接口注入指的就是在接口中定義要注入的信息,并通過(guò)接口完成注入。由于接口注入的繁瑣與侵入性過(guò)高,Spring沒有提供對(duì)接口注入的實(shí)現(xiàn)。19 .Bean的實(shí)例化1、用構(gòu)造器來(lái)實(shí)例化當(dāng)采用構(gòu)造器來(lái)創(chuàng)建bean實(shí)例時(shí),Spring對(duì)class并沒有特殊的要求,我們通常使用的class都適用。也就是說(shuō),被創(chuàng)建的類并不需要實(shí)現(xiàn)任何特定的接口,或以特定的方式編碼,只要指定bean的class屬性即可。不過(guò)根據(jù)所采用的IoC類型,class可能需要一個(gè)默認(rèn)的空構(gòu)造器。此外,IoC容器

20、不僅限于管理JavaBean,它可以管理任意的類。不過(guò)大多數(shù)使用Spring的人喜歡使用實(shí)際的JavaBean具有默認(rèn)的(無(wú)參)構(gòu)造器及setter和getter方法),但在容器中使用非bean形式(non-beanstyle)的類也是可以的。比如遺留系統(tǒng)中的連接池,很顯然它與JavaBean規(guī)范不符,但Spring也能管理它。當(dāng)使用基于XML的元數(shù)據(jù)配置文件,可以這樣來(lái)指定bean類:<beanid="exampleBean"class="examples.ExampleBean"/><beanname="anotherEx

21、ample"class="examples.ExampleBeanTwo"/>2、使用靜態(tài)工廠方法實(shí)例化當(dāng)采用靜態(tài)工廠方法創(chuàng)建bean時(shí),除了需要指定class屬性外,還需要通過(guò)factory-method屬性來(lái)指定創(chuàng)建bean實(shí)例的工廠方法。Spring將調(diào)用此方法(其可選參數(shù)接下來(lái)介紹)返回實(shí)例對(duì)象,就此而言,跟通過(guò)普通構(gòu)造器創(chuàng)建類實(shí)例沒什么兩樣。下面的bean定義展示了如何通過(guò)工廠方法來(lái)創(chuàng)建bean實(shí)例。注意,此定義并未指定返回對(duì)象的類型,僅指定該類包含的工廠方法。在此例中,createInstance()必須是一個(gè)static方法。<beani

22、d="exampleBean"class="examples.ExampleBean2"factory-method="createInstance"/>3、使用實(shí)例工廠方法實(shí)例化與使用靜態(tài)工廠方法實(shí)例化類似,用來(lái)進(jìn)行實(shí)例化的實(shí)例工廠方法位于另外一個(gè)已有的bean中,容器將調(diào)用該bean的工廠方法來(lái)創(chuàng)建一個(gè)新的bean實(shí)例為使用此機(jī)制,class屬性必須為空,而factory-bean屬性必須指定為當(dāng)前(或其祖先)容器中包含工廠方法的bean的名稱,而該工廠bean的工廠方法本身必須通過(guò)factory-method屬性來(lái)設(shè)定(參

23、看以下的例子)。<!-thefactorybean,whichcontainsamethodcalledcreateInstance()-><beanid="myFactoryBean"class=".">.</bean><!-thebeantobecreatedviathefactorybean-><beanid="exampleBean"factory-bean="myFactoryBean"factory-method="createInstan

24、ce"/>雖然設(shè)置bean屬性的機(jī)制仍然在這里被提及,但隱式的做法是由工廠bean自己來(lái)管理以及通過(guò)依賴注入(DI)來(lái)進(jìn)行配置。20 .Prototype作用域:prototype作用域的Bean會(huì)導(dǎo)致在每次對(duì)該Bean請(qǐng)求(將其注入到另一個(gè)Bean中,或者以程序的方式調(diào)用容器的getBean()方法)時(shí)都會(huì)創(chuàng)建一個(gè)新的Bean實(shí)例。根據(jù)經(jīng)驗(yàn),對(duì)有狀態(tài)的Bean應(yīng)該使用prototype作用域,而對(duì)無(wú)狀態(tài)的Bean則應(yīng)該使用singleton作用域。21 .為何使用AOP高度模塊化,使得我們的系統(tǒng)更易實(shí)現(xiàn)和更易維護(hù)使每個(gè)模塊承擔(dān)的責(zé)任更清晰,提高代碼的可追蹤性解決設(shè)計(jì)時(shí)兩難的局

25、面,在不需改動(dòng)原先代碼的情況下推遲不必要的需求的實(shí)現(xiàn)提高代碼的重用性加速系統(tǒng)的開發(fā)和部署,提高程序員的開發(fā)效率降低系統(tǒng)開發(fā)的成本22 .通知的配置ProxyFactoryBean這個(gè)類會(huì)被BeanFactory或是ApplicationContext用來(lái)建立代理對(duì)象1、proxyInterfaces屬性:設(shè)定代理時(shí)可運(yùn)行的接口,2、target屬性:設(shè)定Target對(duì)象,3、interceptorNames屬性:設(shè)定Advice實(shí)例,可能多個(gè)<beanid="helloProxy"class="org.springframework.aop.framewor

26、k.ProxyFactoryBean"><propertyname="proxyInterfaces"><value>neu.danny.IHello</value></property><propertyname="target"><refbean="helloSpeaker"/></property><propertyname="interceptorNames"><list><va

27、lue>logBeforeAdvice3</value></list></property></bean>23 .通知的正則表達(dá)式Spring提供的org.springframework.aop.support.RegexpMethodPointcutAdvisor可以讓你使用Perl風(fēng)格的Regularexpression來(lái)定義Pointcuts,它是Spring中靜態(tài)Pointcut的實(shí)例,在符合Regularexpression的情況下應(yīng)用Advices,您可以使用以下的幾個(gè)符號(hào):符號(hào)描述:,符合任何單一字元+符合前一個(gè)字元一次或多次

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論