2019面試java101spring面試題部分_第1頁(yè)
2019面試java101spring面試題部分_第2頁(yè)
2019面試java101spring面試題部分_第3頁(yè)
2019面試java101spring面試題部分_第4頁(yè)
2019面試java101spring面試題部分_第5頁(yè)
已閱讀5頁(yè),還剩10頁(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、Spring部分1.談?wù)勀銓?duì)spring IOC和DI的理解,它們區(qū)別?IoC Inverse of Control 反轉(zhuǎn)控制的概念,就是將原本在程序中手動(dòng)創(chuàng)建UserService對(duì)象的控制權(quán),交由Spring框架管理,簡(jiǎn)單說(shuō),就是創(chuàng)建UserService對(duì)象控制權(quán)被反轉(zhuǎn)到了Spring框架 DI:Dependency Injection 依賴注入,在Spring框架負(fù)責(zé)創(chuàng)建Bean對(duì)象時(shí),動(dòng)態(tài)的將依賴對(duì)象注入到Bean組件面試題: IoC 和 DI的區(qū)別?IoC 控制反轉(zhuǎn),指將對(duì)象的創(chuàng)建權(quán),反轉(zhuǎn)到Spring容器 , DI依賴注入,指Spring創(chuàng)建對(duì)象的過(guò)程中,將對(duì)象依賴屬性通過(guò)配置進(jìn)

2、行注入2.BeanFactory 接口和 ApplicationContext 接口別 ?區(qū)ApplicationContext 接口繼承BeanFactory接口,Spring工廠是BeanFactory ,BeanFactory采取延遲加載,第一次getBean時(shí)才會(huì)初始化Bean, ApplicationContext是會(huì)在加載配置文件時(shí)初始化Bean。ApplicationContext是對(duì)BeanFactory擴(kuò)展,它可以進(jìn)行國(guó)際化處理、事件傳遞和bean自動(dòng)裝配以及各種不同應(yīng)用層的Context實(shí)現(xiàn)開(kāi)發(fā)中基本都在使用 ApplicationContext, web 項(xiàng) 目 使 用W

3、ebApplicationContext ,很少用到BeanFactoryBeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource(applicationContext.xml);IoServiceoService = (IoService); o();oService) beanFactory.getBean(oServiay3.spring配置bean實(shí)例化有哪些方式?1)使用類(lèi)構(gòu)造器實(shí)例化(默認(rèn)無(wú)參數(shù)).spring.b_instanc2)使用靜態(tài)工廠方法實(shí)例化(簡(jiǎn)單工廠模式)/下面這段配置的含義:調(diào)用Bean2

4、Factory的getBean2方法得到bean23)使用實(shí)例工廠方法實(shí)例化(工廠方法模式)/先創(chuàng)建工廠實(shí)例bean3Facory,再通過(guò)工廠實(shí)例創(chuàng)建目標(biāo)bean實(shí)例.spring.b_4.簡(jiǎn)單的說(shuō)一下spring的生命周期?1)在配置 元素,通過(guò) init-method 指定Bean的初始化方法,通過(guò) destroy-method 指定Bean銷(xiāo)毀方法需要注意:destroy-method 只對(duì) scope=singleton 有效銷(xiāo)毀方法,必須關(guān)閉ApplicationContext對(duì)象(手動(dòng)調(diào)用),*才會(huì)被調(diào)用ClassPathXmlApplicationContext applicat

5、ionContext= new ClassPathXmlApplicationContext(applicationC ontext.xml);applicationContext.close();2)Bean的完整生命周期 (十一步驟)【了解內(nèi)容,但是對(duì)于操作理解有一定幫助】springinstantiate bean對(duì)象實(shí)例化populate properties 封裝屬性如果Bean實(shí)現(xiàn)BeanNameAware執(zhí)行 setBeanName如果實(shí)現(xiàn)或BeanBeanFactoryAware者 ApplicationContextAware設(shè)置工廠 setBeanFactory 或者上下文

6、對(duì)象 setApplicationContext如果存在類(lèi)實(shí)現(xiàn) BeantProsor(后處理Bean) ,執(zhí)行tProsor 接tProsBeforeInitialization , Bean口提供鉤子函數(shù),用來(lái)動(dòng)態(tài)擴(kuò)展修改Bean。(程序自動(dòng)調(diào)用后處理Bean)public class MyBeantProsor implementsBeantProsor public ObjectString beanName)tProsAfterInitialization(Object bean,throws BeansException System.out.prln(第八步:后處理Bean,af

7、ter初始化。);/后處理Bean,在這里加上一個(gè)動(dòng)態(tài),就把這個(gè)Bean給修改了。return bean;/返回bean,表示沒(méi)有修改,如果使用動(dòng)態(tài)對(duì)象,那么就修改了。,返回public ObjecttProsBeforeInitialization(Objectbean, String beanName)throws BeansException System.out.prln(第五步:后處理Bean的:before初始化!);/后處理Bean,在這里加上一個(gè)動(dòng)態(tài),就把這個(gè)Bean給修改了。return bean;/返回bean本身,表示沒(méi)有修改。注意:這個(gè)前處理Bean和后處理Bean會(huì)對(duì)

8、所有的Bean進(jìn)行。如果Bean實(shí)現(xiàn)InitializingBean 執(zhí)行 aftropertiesSet調(diào)用 指定初始化方法 init 如果存在類(lèi)實(shí)現(xiàn) BeantProsor (處理Bean ) ,執(zhí)行tProsAfterInitialization執(zhí)行業(yè)務(wù)處理如果Bean實(shí)現(xiàn) Disean 執(zhí)行 destroyab調(diào)用 指定銷(xiāo)毀方法 customerDestroy5.請(qǐng)介紹一下Spring框架中Bean的生命周期和作用域bean定義在配置文件里面用來(lái)進(jìn)行定義。bean初始化有兩種方式初始化:A.在配置文件中通過(guò)指定init-method屬性來(lái)完成 B.實(shí)現(xiàn).springframwork.b

9、eans.factory.InitializingBean接口bean調(diào)用有三種方式可以得到bean實(shí)例,并進(jìn)行調(diào)用bean銷(xiāo)毀銷(xiāo)毀有兩種方式A.使用配置文件指定的destroy-method屬性 B.實(shí)現(xiàn)eabean接.springframwork.bean.factory.Dis口#作用域 singleton當(dāng)一個(gè)bean的作用域?yàn)閟ingleton, 那么Spring IoC容器中只會(huì)存在一個(gè)共享的bean實(shí)例,并且所有對(duì)bean的請(qǐng)求,只要id與該bean定義相匹配,則只會(huì)返回bean的同一實(shí)例。 prototypePrototype作用域的bean會(huì)導(dǎo)致在每次對(duì)該bean請(qǐng)求(將其注

10、入到另一個(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作用域request在一次HTTP請(qǐng)求中,一個(gè)bean定義對(duì)應(yīng)一個(gè)實(shí)例;即每次HTTP 請(qǐng)求將會(huì)有各自的bean實(shí)例, 它們依據(jù)某個(gè)bean定義創(chuàng)建而成。該作用 域僅在基于web的Spring ApplicationContext情形下 有效。ses在一個(gè)HTTP Ses中,一個(gè)bean定義對(duì)應(yīng)一個(gè)實(shí)例。該作用域僅在基于web的Spring ApplicationContext

11、情形下有效。global ses在一個(gè)全局的HTTP Ses中,一個(gè)bean定義對(duì)應(yīng)一個(gè)實(shí)例。典型情況下,僅在使用portlet context的時(shí)候有效。該作用域僅在基于 web的Spring ApplicationContext情形下有效。6.Bean注入屬性有哪幾種方式?spring支持構(gòu)造器注入和setter方法注入構(gòu)造器注入,通過(guò) 元素完成注入setter方法注入, 通過(guò) 元素完成注入【開(kāi)發(fā)中常用方式】AOP,AOP的作用是什么?面向切面編程(AOP)提供另外一種角度來(lái)思考程序結(jié)構(gòu),通過(guò)這種7.方式彌補(bǔ)了面象編程(OOP)的,除了類(lèi)(classes)以外,AOP提供了切面。切面對(duì)關(guān)注

12、點(diǎn)進(jìn)行模塊化,例如橫切多個(gè)類(lèi)型和對(duì)象的事務(wù)管理Spring的一個(gè)關(guān)鍵的組件就是AOP框架,可以是否使用式服務(wù)。最重要的服AOP 提供式企業(yè)服務(wù),特別是為了替代EJB務(wù)是性事務(wù)管理,這個(gè)服務(wù)建立在Spring的抽象事物管理之上。允許用戶實(shí)現(xiàn)自定義切面,用AOP來(lái)完善OOP的使用,可以把Sprin對(duì)Spring的一種增強(qiáng)P看作是8.Spring的類(lèi)有哪些,各作用?BeanFactory:產(chǎn)生一個(gè)新的實(shí)例,可以實(shí)現(xiàn)單例模式BeanWrapper:提供的get及set方法ApplicationContext:提供框架的實(shí)現(xiàn),包括BeanFactory的所有功能9.Spring里面如何配置數(shù)據(jù)庫(kù)驅(qū)動(dòng)?使

13、用”.springframework.jdbc.datasource.DriverManagerDataSource”數(shù)據(jù)源來(lái)配置數(shù)據(jù)庫(kù)驅(qū)動(dòng)。示例如下:1 23456789.hsqldb.jdbcDriverjdbc:hsqldb:db/appfuseabcabc10111210.Spring里面applicationContext.xml文件能不能改成其他文件名?ContextLoaderListener是一個(gè)ServletContextListener, 它在你的web應(yīng)用啟動(dòng)的時(shí)候初始化。缺省情況下, 它會(huì)在WEB-INF/applicationContext.xml文件找Spring的

14、配置。 你可以通過(guò)定義一個(gè)元素名字為”contextConfigLocation”來(lái)改變Spring配置文件的 位置。示例如下:1 .springframework.web.cont2ext.ContextLoaderListener34contextConfigLocation5/WEB-INF/xyz.xml678 11.Spring里面如何定義hibernate map?添加hibernate map文件到web/WEB-INF目錄下的applicationContext.xml文件里面。示例如下:1 2alue/appfuse/m/User.hbm.xml/v345 12.Spring

15、如何處理線程并發(fā)問(wèn)題?Spring使用ThreadLocal解決線程安全問(wèn)題知道在一般情況下,只有無(wú)狀態(tài)的Bean才可以在多線程環(huán)境下共享,在Spring中,絕大部分Bean都可以作用域。就是因?yàn)镾pring對(duì)一些Bean(如為singletonontextHolder、ionSynchronizationManager、ReqTranLocaleContextHolder等)中非線程安全狀態(tài)采用ThreadLocal進(jìn)行處理,讓它們也成為線程安全的狀態(tài),因?yàn)橛袪顟B(tài)的Bean就可以在多線程享了。ThreadLocal和線程同步機(jī)制都是為了解決多線程中相同變量的問(wèn)題。在同步機(jī)制中,通過(guò)對(duì)象的鎖機(jī)

16、制保證同一時(shí)間只有一個(gè)線程訪問(wèn)變量。這時(shí)該變量是多個(gè)線程共享的,使用同步機(jī)制要求程序慎密地分析什么時(shí)候?qū)ψ兞窟M(jìn)行讀寫(xiě),什么時(shí)候需要鎖定某個(gè)對(duì)象,什么時(shí)候?qū)^大。對(duì)象鎖等繁雜,程序設(shè)計(jì)和編寫(xiě)難度相而ThreadLocal則從另一個(gè)角度來(lái)解決多線程的并發(fā)。ThreadLocal會(huì)為每一個(gè)線程提供一個(gè)獨(dú)立的變量副本,從而隔離了多個(gè)線程對(duì)數(shù)據(jù)的。因?yàn)槊恳粋€(gè)線程都擁有自己的變量副本,從而也就沒(méi)有必要對(duì)該變量進(jìn)行同步了。ThreadLocal提供了線程安全的共享對(duì)象,在編寫(xiě)多線程代碼時(shí),可以把不安全的變量封裝進(jìn)ThreadLocal。由于ThreadLocal中可以持有任何類(lèi)型的對(duì)象,低版本JDK所提供的

17、get()返回的是Object對(duì)象,需要強(qiáng)制類(lèi)型轉(zhuǎn)換。但JDK5.0通過(guò)泛型很好的解決了這個(gè)問(wèn)題,在一定程度地簡(jiǎn)化 ThreadLocal的使用。概括起來(lái)說(shuō),對(duì)于多線程資源共享,同步機(jī)制采用了“以時(shí)間換空間”的方式,而ThreadLocal采用了“以空間換時(shí)間”的方式。前者僅提供一份變量,讓不同的線程排隊(duì)每一個(gè)線程都提供了一份變量,因此可以同時(shí),而后者為而互不影響。13.為什么要有事物行為?14.介紹一下Spring的事物管理事務(wù)就是對(duì)一系列的數(shù)據(jù)庫(kù)操作(比如多條數(shù)據(jù))進(jìn)行的提交或回滾操作,如果成功,那么一起成功,如果中間有一條出現(xiàn)異常,那么回滾之前的所有操作。這樣可以防止出現(xiàn)臟數(shù)據(jù),防止數(shù)據(jù)

18、庫(kù)數(shù)據(jù)出現(xiàn)問(wèn)題。開(kāi)發(fā)中為了避免這種情況一般都會(huì)進(jìn)行事務(wù)管理。Spring中也有自己的事務(wù)管理機(jī)制,一般是使用TranionMananger進(jìn)行管 理,可以通過(guò)Spring的注入來(lái)完成此功能。spring提供了幾個(gè)關(guān)于事務(wù)處理的類(lèi):ionDefinition /事務(wù)屬性定義Tranus /代表了當(dāng)前的事務(wù),可以提交,回滾。ionManager這個(gè)是spring提供的用于管理TranscationSPlatformTran事務(wù)的基礎(chǔ)接口,其下有一個(gè)實(shí)現(xiàn)的抽象類(lèi)使用的事務(wù)管AbstractPlatformTran理類(lèi)例如 DataSourceTran子類(lèi)。一般事務(wù)定義步驟:ionManager,io

19、nManager等都是這個(gè)類(lèi)的TranTranTrantrantryionDefinition td = newionDefinition();ionSus ts =ionManager.getTranion(td);/dotransth45mit(ts);6 catch(Exception e)tranionManager.rollback(ts);78 spring提供的事務(wù)管理可以分為兩類(lèi):編程式的和式的。編程式的,比較靈活,但是代碼量大,存在重復(fù)的代碼比較多;式的比編程式的更靈活。編程式主要使用tranionTemplate。省略了部分的提交,回滾,一系列的事務(wù)對(duì)象定義,需注入事務(wù)管理

20、對(duì)象.1 void add()tranTranionTemplate.execute( newionCallback()2pulic Object3nTranion(TranionSus ts)/do sth4567 式:使用TranionProxyFactoryBean:PROPAGATION_REQUIREDPROPAGATION_REQUIRED PROPAGATION_REQUIRED,readOnly圍繞Poxy的動(dòng)態(tài)能夠自動(dòng)的提交和回滾事務(wù).springframework.tranctionProxyFactoryBeanion.erceptor.TransaPROPAGATION

21、_REQUIRED支持當(dāng)前事務(wù),如果當(dāng)前沒(méi)有事務(wù),就新建一個(gè)事務(wù)。這是最常見(jiàn)的選擇。 PROPAGATION_SUPPORTS支持當(dāng)前事務(wù),如果當(dāng)前沒(méi)有事務(wù),就以非事務(wù)方式執(zhí)行。PROPAGATION_MANDATORY支持當(dāng)前事務(wù),如果當(dāng)前沒(méi)有事務(wù),就拋出異常。PROPAGATION_REQUIRES_NEW新建事務(wù),如果當(dāng)前存在事務(wù),把當(dāng)前事務(wù)掛起。PROPAGATION_NOT_SUPPORTED以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起。PROPAGATION_NEVER以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異常。PROPAGATION_NESTED如果當(dāng)前存在事務(wù),

22、則在嵌套事務(wù)內(nèi)執(zhí)行。如果當(dāng)前沒(méi)有事務(wù),則進(jìn)行與 PROPAGATION_REQUIRED類(lèi)似的操作。15.解釋一下SprinP里面的幾個(gè)名詞切面(Aspect):一個(gè)關(guān)注點(diǎn)的模塊化,這個(gè)關(guān)注點(diǎn)可能會(huì)橫切多個(gè)對(duì)象。事務(wù)管理是J2EE應(yīng)用中一個(gè)關(guān)于橫切關(guān)注點(diǎn)的很好的例子。 在SprinP中,切面可以使用通用類(lèi)(基于模式的風(fēng)格) 或者在普通類(lèi)中以 Aspect 注解(AspectJ風(fēng)格)來(lái)實(shí)現(xiàn)。連接點(diǎn)(Joinpo):在程序執(zhí)行過(guò)程中某個(gè)特定的點(diǎn),比如某方法調(diào)用的時(shí)候或者處理異常的時(shí)候。 在SprinP中,一個(gè)連接點(diǎn) 總是 代表一個(gè)方法的執(zhí)行。 通過(guò)一個(gè).aspectj.lang.JoinPo類(lèi)型的

23、參數(shù)可以使通知(Advice)的主體部分獲得連接點(diǎn)信息。通知(Advice):在切面的某個(gè)特定的連接點(diǎn)(Joinpo)上執(zhí)行的動(dòng)作。通知有各種類(lèi)型,其中包括“around”、“before”和“after”等通知。 通知的類(lèi)型將在后面部分進(jìn)行。許多AOP框架,包括Spring,都是以器做通知模型, 并一個(gè)以連接點(diǎn)為中心的器鏈。切入點(diǎn)(Pocut):匹配連接點(diǎn)(Joinpo)的斷言。通知和一個(gè)切入點(diǎn)表達(dá)式關(guān)聯(lián),并在滿足這個(gè)切入點(diǎn)的連接點(diǎn)上運(yùn)行(例如,當(dāng)執(zhí)行某個(gè)特定名稱的方法時(shí))。 切入點(diǎn)表達(dá)式如何和連接點(diǎn)匹配是AOP的語(yǔ)法。:Spring缺省使用AspectJ切入點(diǎn)引入(roduction):(也被稱為類(lèi)型(er-typedeclaration)。額外的方法或者某個(gè)類(lèi)型的字段。Spring允許引入新的接口(以及一個(gè)對(duì)應(yīng)的實(shí)現(xiàn))到任何被代理的對(duì)象。例如,你可以使用一個(gè)引入來(lái)使bean實(shí)現(xiàn)IsModified 接口,以便簡(jiǎn)化緩存機(jī)制。目標(biāo)對(duì)象(Object): 被一個(gè)或者多個(gè)切面(aspect)所通知(advise)的對(duì)象。也有人把它叫做 被通知(advised)對(duì)象。 既然SprinP是通過(guò)運(yùn)行時(shí)實(shí)現(xiàn)的,這個(gè)對(duì)象永遠(yuǎn)是一個(gè) 被(proxied) 對(duì)象。Proxy): AOP框架創(chuàng)建的對(duì)象,用來(lái)實(shí)現(xiàn)切面 contract)(包括通知方法執(zhí)行等功能)。 在(AOPAOP契約

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論