摘自網絡java
1 Spring工做原理web
1.首先讀取配置文件到容器中。spring
2.經過java反射機制將配置文件中描述的對象轉換成java對象;數據庫
3.將這些java對象按照配置文件中的定義將他們注入到各自匹配的對象中去。編程
2 爲何要用Spring?設計模式
Spring的目的是讓對象與對象之間的關係沒有經過代碼來關聯,經過配置文件說明管理。Spring容器的核心功能是IOC和AOP。IOC即控制反轉,動態注入。使用對象以前沒必要使用new關鍵字本身建立,從IOC容器中直接獲取。安全
AOP即面向切面編程,提供對某一類對象的事物管理服務。(調用該類具體方法的先後調用指定模塊)網絡
3 Spring中的BeanFactory與ApplicationContext的做用有哪些?session
BeanFactory負責建立和分發各類bean;架構
在建立bean的同時負責協調bean之間的關係,從而下降bean之間的耦合性;
調用用戶定義的建立和銷燬方法,負責Bean的生命週期;
ApplicationContext提供了文本解析工具,包括對國際化的支持。
提供了載入文件資源的通用方法,如載入圖片。
向註冊爲監聽器的Bean發送事件。
4 如何在spring中實現國際化?
添加Spring表單標籤庫tld文件
在web.xml文件中添加該標籤庫的引用
建立資源庫文件ApplicationResources.properties利用native2ascii工具將目標文件轉換爲要國際化的語言類別
在applicationContext.xml文件中添加資源庫配置
標籤化JSP頁面中的文字
5 使用spring有什麼好處?
1.提供了一種管理對象的方法,能夠把中間層對象有效地組織起來。一個完美的框架「黏合劑」。
2. 採用了分層結構,能夠增量引入到項目中。
3. 有利於面向接口編程習慣的養成。
4. 目的之一是爲了寫出易於測試的代碼。
5. 非侵入性,應用程序對Spring API的依賴能夠減至最小限度。
6. 一致的數據訪問介面。
7. 一個輕量級的架構解決方案。
6 什麼是spring?它有什麼特色?
Spring是輕量級的控制反轉和麪向切面的容器框架。
具備分層的體系結構,能夠選擇本身須要的功能模塊。
簡化系統架構的設計,提供管理業務對象的方法。
不只不會對其餘框架有依賴性,還提供對其餘框架(Struts、Hibernate)的更好的粘合的機制
7 Hibernate應用與傳統JDBC應用的比較
Hibernate是java對象/關係數據庫映射工具。JDBC(Java Data Base Connectivity,java數據庫鏈接)是一種用於執行SQL語句的Java API,能夠爲多種關係數據庫提供統一訪問,它由一組用Java語言編寫的類和接口組成。
(1).關係型數據庫與JDBC是一對一的關係,只須要簡單配置就能夠實現,因此Hib系,Hibernate與關係型數據庫是一對多的關ernate是跨數據庫平臺的。
(2)代碼中,Hibernate能夠不使用本地化SQL語句完成對數據的SUDI,與數據庫是鬆耦合,JDBC不能。
(3)Hibernate很好地兼容了JDBC,能夠在代碼中直接嵌入JDBC API,但不提倡這樣作。
(4)Hibernate擁有數據鏈接池實現機制(sessionFactory)。
8 什麼是aop,aop的做用是什麼?
AOP即面向切面編程。AOP提供對某一類對象的事物管理服務。(調用該類具體方法的先後調用指定模塊)
9 請闡述Spring框架和EJB相比較,各自的優缺點?
EJB 是優良的業務對象分佈式框架,EJB容器具備事務管理,安全機制功能;
EJB是重量級的,部署麻煩;
EJB 代碼不能脫離EJB 容器;
購買EJB 容器價錢昂貴,啓動緩慢;
Spring框架是輕量級的架構,支持EJB並對其實現更加簡化,實現瞭解耦,並脫離了容器;
中斷了應用程序的邏輯,使代碼變得不完整,不直觀。
將本來應該代碼化的邏輯配置化,增長了出錯的機會以及額外的負擔。
失去了IDE的支持。
調試階段不直觀,後期的bug對應階段,不容易判斷問題所在。
10 在Spring IoC核心模式中,試比較二種推薦的依賴注入方式的相同點和不一樣點?
設置注入和構造注入都具備無侵入性的特色。
構造注入:
構造注入避免了煩瑣的setter方法的編寫,從而使得組件被建立後處於相對穩定狀態;
類之間的關聯關係僅在構造函數中表達,使得系統層次清晰;
經過構造注入,能夠在構造函數中決定依賴關係得注入順序,優先依賴的先注入;
設置注入:
經過setter方法設定依賴關係顯得更加直觀,天然;
若是依賴關係(或繼承關係)較爲複雜,設置注入則更爲簡潔;
對於某些第三方類庫,有求組件必須提供默認的構造函數,此時構造注入就有了侷限性,採用設置注入爲佳。
11 Spring中Bean的自動裝配都有哪些選擇?
1:-->byName模式:這種模式是經過bean的屬性名字進行自動裝配的,也就是說在xml配置文件中查找一個與將要裝配的屬性相同名字的bean。2:--->byType模式
byType就是指的若是在.xml配置文件中有一個與屬性類型同樣的Bean,則spring就會自動裝配這個屬性,若是要是多於一個這樣的bean的話,則程序會拋出異常.咱們知道要使用byName模式的話Bean的ID 必須和屬性名稱想對應,若是咱們使用byTpe模式的話,則不用考慮Bean的ID名稱與屬性名稱的問題了.對於byType匹配模式咱們就不在給出範例了,你們只要把上面兩個範例中的byName該成byType便可.
3:--->constructor
constructor模式就是根據構造函數的參數進行自動裝配、
4:--->autodetect模式
autodetect模式就是指經過對Bean檢查類的內部來選擇是使用constructor模式裝配仍是使用byType模式裝配,若是先找到的是constructor模式那麼就使用constructor模式進行裝配,若是沒有constructor,而找到了byType,那麼就使用byType,一樣這種模式也不給出具體範例了,你們按照上述範例進行改造如下就能夠了,這樣也能夠鍛鍊如下你們的動手能力,若是有什麼問題,你們能夠按照首頁上給出的聯繫方式與我聯繫.接下來我門來看如下最後一種裝配模式.
5:--->no模式
相信你們從字面上的意思理解,就能夠知道這種模式的意思了,既不使用自動裝配模式,這種也是默認的配置,在不少企業級的應用中並不鼓勵使用自動裝配模式,由於它對於Bean之間的參考依賴關係不清晰
12 Spring 框架的7 個模塊功能
組成 Spring 框架的每一個模塊(或組件)均可以單獨存在,或者與其餘一個或多個模塊聯合實現。每一個模塊的功能以下:
(1)核心容器(Spring Core)
這是Spring框架最基礎的部分,它提供了依賴注入特徵來實現容器對Bean的管理。這裏最基本的概念是BeanFactory,這是任何Spring應用的核心。BeanFactory是工廠模式的一個實現,它使用IOC將應用配置和依賴說明從實際的應用代碼中分離出來。
(2)Spring 上下文(Spring Context)
核心模塊的BeanFactory使Spring成爲一個容器,而上下文模塊使它成爲一個框架,這個模塊擴展了BeanFactory的概念,增長了對國際化消息,事件傳播及驗證的支持,同時提供了電子郵件、JNDI訪問、遠程等企業服務。
(3)Spring 的面向方面的編程(Spring AOP)
Spring在它的AOP模塊中提供了面向切面編程的豐富支持。這個模塊是在Spring應用中實現切面編程的基礎。爲了確保Spring與其它AOP框架的互用性,Spring的AOP支持基於AOP聯盟定義的API。AOP是一個開源項目,經過定義一組共同的接口和組件來促進AOP的使用以及不一樣的AOP實現之間的互用性。同時將元數據編程引入了Spring,能夠爲你的源代碼增長註釋,指示Spring在何處以及如何應用於切面函數。
(4)Spring JDBC DAO 抽象層(Spring DAO)
使用JDBC常常導至大量的重複代碼,取得鏈接、建立語句、處理結果集,而後關閉鏈接。Spring的JDBC和DAO模塊抽取了這些重複代碼,所以你能夠保持你的數據庫訪問代碼乾淨簡潔,而且能夠防止因關閉數據庫資源失敗而引發的問題。
(5)Spring ORM 的對象關係工具(Spring ORM)
對那些更喜歡使用對象/關係映射工具而不是直接使用JDBC的人,Spring提供了ORM模塊。Spring並不試圖實現它本身的ORM解決方案,而是爲幾種流行的ORM框架提供了集成方案,包括:Hibernate、JDO和Ibatis SQL映射。
(6)Spring Web 模塊(Spring Web)
Web上下文模塊創建於應用上下文模塊之上,提供了一個適合於Web應用於的上下文。另外,這個模塊還提供了一些面向服務支持,它也提供了Spring和其它Web框架的集成,好比:Struts.
(7)Spring MVC 框架(Spring Web MVC)
Spring爲構建成Web應用提供了一個功能全面的MVC框架。雖然Spring能夠很容易地與其它MVC框架集成,例如Struts,但Spring的MVC框架使用IOC對控制邏輯和業務對象提供了徹底的分離。
Spring真正的精華是它的Ioc模式實現的BeanFactory和AOP。
13 輕量級的J2EE應用開發框架的具體體現(Spring輕量級在J2EE應用開發框架的具體體現)
Spring Framework解決了許多在J2EE開發中常見的問題。
Spring的jar包通常不超過1M
Spring 簡化並融合了EJB
Spring 經過配置文件管理Bean文件
14 「非侵入式」的體現以及如何達到「非侵入式」的設計目標
(1)「非侵入式」的體現
q 容許在應用系統中自由地選擇和組裝Spring的各功能模塊,而且不強制要求應用中的類必須從Spring 的系統API中的某個類來繼承或者實現某個接口。
q 同時提供和其它框架集成的接口,如與Hibernate、Struts 的集成等;
(2)如何達到「非侵入式」的設計目標
p 應用Java的Reflection機制
<property name=「bean1」><ref bean=「anotherbean」/></property>
p 並配合使用Spring中的核心的BeanWrapper和BeanFactory類組件---實現對象的建立和屬性注入
15 爲何要面向接口進行設計
面向接口編程是面向對象的核心,面向接口設計能夠提供不一樣靈活的子類實現,從而減小耦合性,加強代碼穩定和健壯性。
16 模式和框架的區別
模式是一種設計思想,提供一種指導從而作出優良的設計方案;
框架是一種軟件,一組組件;
設計模式比框架更抽象
框架比設計模式更加特徵化
設計模式是比框架更小的體系結構元素
17 Struts運行原理
? 客戶端請求*.do的路徑。
? Struts框架的中心控制器(一般爲ActionServlet類的實例,或者用戶自定義的ActionServlet的子類的實例)截獲到客戶請求。
? 中心控制器根據struts-config.xml文件中配置的映射信息將請求轉發給相應的Action組件對象來處理。
? 若是請求頁面配置了對應的ActionForm組件,控制器類還會把表單數據填入ActionForm組件。
? 得到路徑對應的Action組件的實例。
? 調用Action組件實例的execute方法處理請求,並傳ActionForm對象。
? Action組件對象提取ActionForm組件對象中包含的請求數據,而後調用封裝了業務邏輯的模型組件進行業務邏輯處理。
? Action對象根據模型組件的處理結果返回相應的ActionForward對象給中心控制器。
? 中心控制器根據struts-config.xml文件中的配置信息肯定要跳轉的頁面。
? 跳轉到ActionForward頁面,呈現用戶數據。
18 Struts中ActionForm有什麼做用?
1、ActionForm Bean是一種JavaBean,除了具備一些JavaBean的常規方法,還包含一些特殊方法,用於驗證HTML表單數據以及將其屬性從新設置爲默認值。
2、Struts框架利用ActionForm Bean來進行View組件和Controller組件之間表單數據的傳遞。
3、Struts框架把View組件接受到的用戶輸入的表單數據保存在ActionForm Bean中,把它傳遞Controller組件,Controller組件能夠對ActionForm Bean中的數據進行修改,JSP文件使用Struts標籤讀取修改後的ActionForm Bean的信息,從新設置HTML表單。
19 簡述手工搭建Struts開發部署環境步驟?
一、 添加支持的Struts jar包
二、 添加Struts的tld標籤庫文件
三、 建立struts-config.xml
四、 在web.xml文件中對Struts的ActionServlet進行配置聲明