1. 程式人生 > >【面試】【Spring常見問題總結】【06】

【面試】【Spring常見問題總結】【06】

類名 truct htm 持久化框架 type 兩個 請求 method val

【常見面試問題總結文件夾>>>】



51、spring中的applicationContext.xml能不能改為其它名字

ContextLoaderListener是一個ServletContextListener, 它在你的web應用啟動的時候初始化。缺省情況下,它會在WEB-INF/applicationContext.xml文件找Spring的配置。 你能夠通過定義一個<context-param>元素名字為”contextConfigLocation”來改變Spring配置文件的位置。示比例如以下:

<span style="font-size:14px;"><listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    <context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>/WEB-INF/xyz.xml</param-value>
    </context-param>
</listener></span>

52、在web中怎樣配置spring

在J2EE的web應用裏面配置spring很easy。僅僅須要把spring得ContextLoaderListener加入到你的web.xml文件中面就能夠了,示比例如以下:

<span style="font-size:14px;"><listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener></span>


53、Spring中BeanFactory和ApplicationContext的作用和差別

BeanFactory負責讀取bean配置文檔,管理bean的載入,實例化,維護bean之間的依賴關系,負責bean的聲明周期。

ApplicationContext除了提供上述BeanFactory所能提供的功能之外,還提供了更完整的框架功能:

a. 國際化支持

b. 資源訪問:Resource rs = ctx. getResource(“classpath:config.properties”),

“file:c:/config.properties”

c. 事件傳遞:通過實現ApplicationContextAware接口。

54、經常使用的獲取ApplicationContext的方法

FileSystemXmlApplicationContext:

從文件系統或者url指定的xml配置文件創建,參數為配置文件名稱或文件名稱數組

ClassPathXmlApplicationContext:

從classpath的xml配置文件創建,能夠從jar包中讀取配置文件

WebApplicationContextUtils:

從web應用的根文件夾讀取配置文件,須要先在web.xml中配置,能夠配置監聽器或者servlet來實現

<span style="font-size:14px;"><listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
    <servlet-name>context</servlet-name>
    <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet></span>

這兩種方式都默認配置文件為web-inf/applicationContext.xml,也可使用context-param指定配置文件

<span style="font-size:14px;"><context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/myApplicationContext.xml</param-value>
</context-param></span>

55spring中的jdbc與傳統的jdbc有什麽差別?

Spring的JDBC是在原生態JDBC上面的一層簡單的封裝,提供了一些一用的接口,節省代碼。無論連接(Connection),無論事務、無論異常、無論關閉(con.close() ps.close )。僅僅須要實現Spring提供的回調類。

傳統的JDBC運行步驟例如以下:

a、創建連接

b、創建語句(SQL)

c、運行語句

d、返回結果集(設置到JavaBean中等處理)

e、關閉連接釋放資源

Spring JDBC僅僅須要實現b和d兩個步驟,其它的都由Spring替你完畢。而b和d都是通過實現指定的接口。然後將實現類傳遞給Spring就OK了。

56、什麽是spring,它有什麽特點?

Spring是一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器框架。

輕量——從大小與開銷雙方面而言Spring都是輕量的。完整的Spring框架能夠在一個大小僅僅有幾MB多的JAR文件中公布。

而且Spring所需的處理開銷也是微不足道的。

此外,Spring是非侵入式的(侵入式讓用戶代碼產生對框架的依賴,這些代碼不能在框架外使用,不利於代碼的復用。但侵入式能夠使用戶跟框架更好的結合。更easy更充分的利用框架提供的功能。非侵入式的代碼則沒有過多的依賴,能夠非常方便的遷移到其它地方。可是與用戶代碼互動的方式可能就比較復雜。):典型地,Spring應用中的對象不依賴於Spring的特定類。

控制反轉——Spring通過一種稱作控制反轉(IoC)的技術促進了松耦合。當應用IoC,一個對象依賴的其他對象會通過被動的方式傳遞進來,而不是這個對象自己創建或者查找依賴對象。你能夠覺得IoC與JNDI相反——不是對象從容器中查找依賴。而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。

面向切面——Spring提供了面向切面編程的豐富支持。同意通過分離應用的業務邏輯與系統級服務(比如審計(auditing)和事務(transacntion)管理)進行內聚性的開發。

應用對象僅僅實現它們應該做的——完畢業務邏輯——僅此而已。它們並不負責(甚至是意識)其他的系統級關註點。比如日誌或事務支持。

容器——Spring包括並管理應用對象的配置和生命周期。在這個意義上它是 一種容器,你能夠配置你的每一個bean怎樣被創建——基於一個可配置原型(prototype),你的bean能夠創建一個單獨的實例或者每次須要時都生成一個新的實例——以及它們是怎樣相互關聯的。

然而,Spring不應該被混同於傳統的重量級的EJB容器,它們常常是龐大與笨重的,難以使用。

框架——Spring能夠將簡單的組件配置、組合成為復雜的應用。在Spring中,應用對象被聲明式地組合,典型地是在一個XML文件中。Spring也提供了非常多基礎功能(事務管理、持久化框架集成等等)。將應用邏輯的開發留給了你。

56、使用spring有什麽優點?

l Spring能有效地組織你的中間層對象。

l Spring能消除在很多project上對Singleton的過多使用。

l Spring能消除使用各種各樣格式的屬性定制文件的須要,在整個應用和project中,可通過一種 一致的方法來進行配置。通過Spring,能夠非常easy地看到類的JavaBean屬性。依賴註入的使用幫助完畢這樣的簡化。

l Spring能通過接口而不是類促進好的編程習慣,降低編程代價到差點兒為零。

l Spring被設計為讓使用它創建的應用盡可能少的依賴於他的APIs。在Spring應用中的大多數業務對象沒有依賴於Spring。

l 使用Spring構建的應用程序易於單元測試。

l Spring能使EJB的使用成為一個實現選擇,而不是應用架構的必定選擇。你能選擇用POJOs或local EJBs來實現業務接口。卻不會影響調用代碼。

l Spring幫助你解決很多問題而無需使用EJB。

Spring能提供一種EJB的替換物,它們適於很多web應用。比如,Spring能使用AOP提供聲明性事務而不通過使用EJB容器,假設你只須要與單個的數據庫打交道,甚至不須要JTA實現。

l Spring為數據存取提供了一致的框架,不論是使用JDBC或O/R mapping產品(如Hibernate)。

總結起來,Spring有例如以下長處:

l 低侵入式設計,代碼汙染極低

l 獨立於各種應用server,能夠真正實現Write Once, Run Anywhere的承諾

l Spring的DI機制減少了業務對象替換的復雜性

l Spring並不全然依賴於Spring,開發人員可自由選用Spring框架的部分或所有。

57、談談Spring框架幾個主要部分組成?

l Spring框架有七個模塊組成組成,這7個模塊(或組件)均能夠單獨存在。也能夠與其他一個或多個模塊聯合使用,主要功能表現例如以下:

l Spring 核心容器(Core):提供Spring框架的基本功能。核心容器的主要組件是BeanFactory。她是工廠模式的實現。BeanFactory使用控制反轉(Ioc)模式將應用程序的配置和依賴性規範與實際的應用代碼程序分開。

l Spring AOP:通過配置管理特性,Spring AOP模塊直接面向方面的編程功能集成到了Spring框架中,所以能夠非常easy的使Spring框架管理的不論什麽對象支持 AOP。Spring AOP模塊為基於Spring的應用程序中的對象提供了事務管理服務。

通過使用Spring AOP,不用依賴於EJB組件,就能夠將聲明性事務管理集成到應用程序中。

l Spring ORM:Spring框架集成了若幹ORM框架,從而提供了ORM的對象關系工具,當中包含 JDO、Hibernate、myBatis和TopLink。

全部這些都遵從Spring的通用事務和DAO異常層結構。

l Spring DAO:JDBC DAO抽象層提供了有意義的異常層次的結構,可用該結構來管理異常處理和不同數據供應商拋出的異常錯誤信息。異常層次結構簡化了錯誤處理,而且大大的減少了須要編寫的異常代碼數量(比如。打開和關系連接)。Spring DAO的面向JDBC的異常遵從通用的DAO異常層結構。

l Spring WEB:Web上下文模塊建立在上下文模塊(Context)的基礎之上,為基於Web服務的應用程序提供了上下文的服務。所以Spring框架支持 Jakarta Struts的集成。

Web模塊還簡化了處理多部分請求及將請求參數綁定到域對象的工作。

l Spring上下文(Context):Spring上下文是一個配置文件,向Spring框架提供上下文信息。

Spring上下文包含企業服務。比如JNDI、EJB、電子郵件、國際化校驗和調度功能。

l Spring MVC:Spring的MVC框架是一個全功能的構建Web應用程序的MVC實現。

通過策略接口。MVC框架變成為高度可配置的,MVC容納的大量視圖技術。包含JSP、Velocity、Tiles、iText和Pol。

57、ApplicationContext接口獲取Bean方法簡單介紹:

l Object getBean(String name) 依據名稱返回一個Bean。client須要自己進行類型轉換。

l T getBean(String name,Class<T> requiredType) 依據名稱和指定的類型返回一個Bean,client無需自己進行類型轉換,假設類型轉換失敗。容器拋出異常。

l T getBean(Class<T> requiredType)依據指定的類型返回一個Bean,client無需自己進行類型轉換。假設沒有或有多於一個Bean存在容器將拋出異常。

l Map<String, T>getBeansOfType(Class<T> type) 依據指定的類型返回一個鍵值為名字和值為Bean對象的 Map,假設沒有Bean對象存在則返回空的Map。

58、Bean的命名

每一個Bean能夠有一個或多個id(或稱之為標識符或名字),在這裏我們把第一個id稱為“標識符”。其余id叫做“別名”;這些id在IoC容器中必須唯一。怎樣為Bean指定id呢,有下面幾種方式。

l 不指定id,僅僅配置必須的全限定類名,由IoC容器為其生成一個標識,client必須通過接口“T getBean(Class<T>requiredType)”獲取Bean。

<span style="font-size:14px;"><bean class=” cn.javass.spring.chapter2.helloworld.HelloImpl”/></span>

l 指定id。必須在Ioc容器中唯一;

<span style="font-size:14px;"><bean id=” bean” class=” cn.javass.spring.chapter2.helloworld.HelloImpl”/></span>

l 指定name,這樣name就是“標識符”,必須在Ioc容器中唯一。

<span style="font-size:14px;"><bean name=” bean” class=” cn.javass.spring.chapter2.helloworld.HelloImpl”/></span>
l 指定id和name,id就是標識符。而name就是別名,必須在Ioc容器中唯一

<span style="font-size:14px;"><bean id=”bean1” name=”alias1” class=” cn.javass.spring.chapter2.helloworld.HelloImpl”/>
<!-- 假設id和name一樣,IoC容器能檢測到。並消除沖突 -->
<bean id="bean3" name="bean3" class="cn.javass.spring.chapter2.helloworld.HelloImpl"/>
</span>
l 指定多個name,多個name用“,”、“;”、“”切割,第一個被用作標識符,其它的(alias1、alias2、alias3)是別名,全部標識符也必須在Ioc容器中唯一;

<bean name=” bean1;alias11,alias12;alias13 alias14”class=” cn.javass.spring.chapter2.helloworld.HelloImpl”/>

<span style="font-size:14px;"><!-- 當指定id時。name指定的標識符所有為別名 -->
<bean id="bean2" name="alias21;alias22" class="cn.javass.spring.chapter2.helloworld.HelloImpl"/>
</span>

59、Bean命名約定

Bean的命名遵循XML命名規範,但最好符合Java命名規範,由“字母、數字、下劃線組成“,並且應該養成一個良好的命名習慣, 比方採用“駝峰式”,即第一個單詞首字母開始,從第二個單詞開始首字母大寫開始,這樣能夠添加可讀性。

60、Spring IoC容器怎樣實例化Bean呢?

1、使用構造器實例化Bean:

使用空構造器進行定義,使用此種方式。class屬性指定的類必須有空構造器

<span style="font-size:14px;"><bean name="bean1" class="cn.javass.spring.chapter2.HelloImpl2"/></span>
使用有參數構造器進行定義,使用此中方式,能夠使用< constructor-arg>標簽指定構造器參數值。當中index表示位置,value表示常量值,也能夠指定引用。指定引用使用ref來引用還有一個Bean定義。

<span style="font-size:14px;"><bean name="bean2" class="cn.javass.spring.chapter2.HelloImpl2">
<!-- 指定構造器參數 -->
<constructor-arg index="0" value="Hello Spring!"/>
</bean>
</span>
2、使用靜態工廠方式實例化Bean,使用這樣的方式除了指定必須的class屬性,還要指定factory-method屬性來指定實例化Bean的方法,並且使用靜態工廠方法也同意指定方法參數,spring IoC容器將調用此屬性指定的方法來獲取Bean,

3、使用實例工廠方法實例化Bean,使用這樣的方式不能指定class屬性。此時必須使用factory-bean屬性來指定工廠Bean。factory-method屬性指定實例化Bean的方法,並且使用實例工廠方法同意指定方法參數。方式和使用構造器方式一樣

【面試】【Spring常見問題總結】【06】