Java麵試題——Spring
Spring概述
1、什麼是Spring?
Spring是一個開源的Java EE開發框架。Spring框架的核心功能可以應用在任何Java應用程序中,
但對Java EE平台上的Web應用程序有更好的擴展性。Spring框架的目標是使得Java EE應用程序的開
發更加簡捷,通過使用POJO為基礎的編程模型促進良好的編程風格。
2、Spring有哪些優點?
1、輕量級:Spring在大小和透明性方麵絕對屬於輕量級的,基礎版本的Spring框架大約隻有2MB。
2、控製反轉(IOC):Spring使用控製反轉技術實現了鬆耦合。依賴被注入到對象,而不是創建或
尋找依賴對象。
3、麵向切麵編程(AOP):Spring支持麵向切麵編程,同時把應用的業務邏輯與係統的服務分離開來。
4、容器:Spring包含並管理應用程序對象的配置及生命周期。
5、MVC框架:Spring的web框架是一個設計優良的web MVC框架,很好的取代了一些web框架。
6、事務管理:Spring對下至本地業務上至全局業務(JAT)提供了同意的事務管理接口。
7、異常處理:Spring提供了一個方便的API將特定技術的異常(右JDBC,Hibernate,或JDO拋出)轉化為
一致的、Unchecked異常。
3、Spring框架有哪些模塊?
1、Core module
2、Bean module
3、Context module
4、Expression Language module
5、JDBC module
6、ORM module
7、OXM module
8、Java Messaging Service(JMX) module
9、Transaction module
10、Web module
11、Web-Servlet module
12、Web-Struts module
13、Web-Portlet module
4、解釋核心容器(應用上下文)模塊
這是Spring的基本模塊,它提供了Spring框架的基本功能。BeanFactory是所有Spring應用的
核心。Spring框架是建立在這個模塊之上的,這也使得Spring成為一個容器。
5、BeanFactory - BeanFactory實例
BeanFactory是工廠模式的一種實現,它使用控製反轉將應用的配置和依賴於實際的應用代碼分離開來。
6、XmlBeanFactory
最常用的就是org.springframework.beans.factory.xml.XmlBeanFactory,它根據XML文件中
定義的內容加載beans。該容器從XML文件中讀取配置元數據,並用它來創建一個完備的係統或應用。
7、解釋AOP模塊
AOP模塊是用來開發Spring應用程序中具有切麵性質的部分。該模塊的發部分服務由AOP Aliance
提供,這就保證了Spring框架和其他AOP礦建之間的互操作性。另外,該模塊將元數據編程映入到了
Spring。
8、解釋抽象JDBC和DAO模塊
通過使用JDBC和DAO模塊保證了與數據庫連接代碼的整潔與簡單,同時避免了由於未能關閉數據
庫資源引起的問題。它在多種數據庫服務器的錯誤信息之上提供了一個很重要的異常層。它還利用
Spring的AOP模塊為Spring應用程序中的對象提供事務管理服務。
9、解釋對象/關係映射集成模塊
Spring通過提供ORM模塊在JDBC的基礎上支持對象關係映射工具。這樣的支持使得Spring可以集成
主流的ORM框架,包括Hibernate,JDO,及iBATIS SQL Maps。Spring的事務管理可以同時支持以上
某種框架和JDBC。
10、解釋web模塊
Spring的web模塊建立在應用上下文(application context)模塊之上,提供了一個適合基於web應
用程序的上下文環境。該模塊還支持了幾個麵向web的任務,如透明的處理多文件上傳請求及將請求
參數同業務對象綁定起來。
11、解釋Spring MVC模塊
Spring提供MVC框架構建web應用程序。Spring可以很輕鬆的痛其他MVC框架結合,但Spring MVC是個
更好的選擇,因為它通過控製反轉將控製邏輯和業務對象完全分離開來。
12、Spring的配置文件
Spring的配置文件是一個XML文件,文件包含了類信息並描述了這些類是如何配置和互相調用的。
13、Spring IOD容器是什麼?
Spring IOC負責創建對象、管理對象(通過依賴注入)、整合對象、配置對象以及管理這些對象的
聲明周期。
14、IOC有什麼優點?
IOC或依賴注入減少了應用程序的代碼量。它使得應用程序的測試很簡單,因為在單元測試中不再需
要單例或JNDI查找機製。簡單的實現以及較少的幹擾知己使得鬆耦合得以實現。IOC容器支持性單例
及延遲加載服務。
15、應用上下文是如何實現的?
FileSystemXmlApplicationContext容器加載XML文件中beans的定義。XML Bean配置文件的完整路徑
必須傳遞給構造器。
FileSystemXmlApplicationContext容器也加載XML文件中的beans的定義。注意,你需要正確的設置
CLASSPATH,因為該容器會在CLASSPATH中查看bean的XML配置文件。
WebXmlApplicationContext:該容器記載xml文件,這些文件定義了web應用中所有beans。
16、Bean Factory和ApplicationContext有什麼區別?
ApplicationContext提供了一種解決文檔信息的方法,一種加載文件資源的方式(如圖片),他們可以
向監聽他們的beans發送消息。另外,容器或者容器中beans的操作,這些必須以bean工廠的編程方式
處理的操作可以在應用上下文中以聲明的方式處理。應用上下文實現了MessageSource,該接口用於獲
取本地消息,實際的實現是可選的。
17、Spring應用程序看起來想什麼?
1、一個定義功能的接口
2、實現包括屬性,setter和getter方法,功能等
3、Spring AOP
4、Spring的XML配置文件
5、使用該功能的客戶端編程
依賴注入
18、Spring中的依賴注入是什麼?
依賴注入作為控製反轉(IOC)的一個層麵,可以有多種解釋方式。在這個概念中,你不用創建對象而
隻需要描述如何創建它們。你不必通過代碼直接的將組建和服務連接在一起,而是通過配置文件說
明哪些組件需要什麼服務。之後IOC容器負責銜接。
19、有哪些不同類型的依賴注入
1、構造器依賴注入:構造器依賴注入在容器觸發構造器的時候完成,該構造器有一係列的參數,每個參
數代表注入的對象。
2、setter方法依賴注入:首先容器會觸發一個無參構造函數或無參靜態工廠方法實例化對象,之後容器
調用bean中的setter方法完成setter方法依賴注入。
20、你推薦那種依賴注入?構造器注入還是setter方法依賴注入?
可以同時使用兩種方式的依賴注入,最好的選擇是使用構造器參數實現強製依賴注入,使用setter方法
事項可選的依賴關係。
Spring Beans
21、什麼是Spring Beans?
Spring Beans是構成Spring應用核心的Java對象。這些對象由Spring IOC容器實例化、組裝、管理。
這些對象通過容器中配置的元數據創建,例如,使用XML文件中定義的創建。
在Spring中創建的beans都是單例的beans。在bean標簽中有一個屬性為“singleton”,如果設為
true,該bean是單例的,如果設為false,該bean是原型bean。Singleton屬性默認設置為true。
因此,sprig框架中所有的bean都是默認為單例bean。
22、Spring Bean中定義了什麼內容?
Spring Bean中定義了所有的配置元數據,這些配置信息告知容器如何創建它,它的生命周期是什麼
以及它的依賴關係。
23、如何向Spring容器提供配置元數據?
有三種方式向Spring容器提供配置元數據:
1、XML配置文件
2、基於注解配置
3、基於Java配置
24、你如何定於bean的作用域?
在Spring中創建一個bean的時候,我們可以聲明它的作用域。隻需要在bean定義的時候通過“scope”
屬性定義即可。例如,當Spring需要產生每次一個新的bean實例時,應該聲明bean的scope屬性
為pototype。如果你希望Spring返回一個實例,應該聲明bean的scope屬性為singleton。
25、說一下Spring中支持的bean的作用域
Spring框架支持的作用域為:
1、singleton:在Spring IOC容器中僅存在一個Bean實例,Bean以單例的方式存在。
2、prototype:一個bean可以定義多個實例。
3、request:每次HTTP請求都會創建一個新的bean,該作用域僅適用於WebApplicationContext環境
4、session:一個HTTP Session定義一個Bean。該作用域僅適用於SebApplocationContext環境。
5、globalSession:同一個全局HTTP Session定義一個Bean。該作用域僅適用於WebApplicationContext環境。
bean默認的scope屬性是singleton。
26、Spring框架中單例beans是線程安全的嗎
不是
27、解釋Spring框架中bean的生命周期
1、Spring容器讀取XML文件中bean的定義並實例化bean
2、Spring根據bean的定義設置屬性值
3、如果該bean實現了BeanNameAware接口,Spring將bean的id傳遞給setBeanName()方法。
4、如果該Bean事項了BeanFactoryAware接口,Spring將beanfactory傳遞給setBeanFactory()方法
5、如果任何bean BeanPostProcessors和該bean相關,Spring調用postProcessBeforeInitialization()方法。
6、如果該Bean實現了InitializingBean接口,調用Bean中的afterPropertiesSet方法,如果bean有
初始化函數聲明,調用相應的初始化方法。
7、如果任何bean BeanPostProcessors和該bean相關,調用postProcessAfterInitialization()方法
8、如果該bean實現了DisposableBean,調用destory()方法。
28、哪些是最重要的bean生命周期方法?能重寫它們嗎?
有兩個重要的bean生命周期方法。第一個是setuo方法,該方法在容器加載bean的時候被調用。第二個
是teardown方法,該方法在bean從容器中移除的時候調用。
bean標簽有兩個重要的屬性(init-method和destroy-method),你可以通過這兩個屬性定義自己的初始化
方法和析構方法。Spring也有相應的注解:@PostConstruct和@PreDestory
29、什麼是Spring的內部bean?
當一個bean被用作另一個bean的屬性是,這個bean可以被聲明為內部bean。在基於XML的配置元數據中,
可以通過吧元素定義在 或元素內部實現定義內部bean。內部bean總是匿名的並且它們的scope總是prototype
30、如何在Spring中注入Java集合類?
Spring提供如下幾種類型的集合配置元素:
1、list元素用來注入一係列的值,允許有相同的值。
2、set元素用來注入一係列的值,不允許有相同的值。
3、map用來注入一組“鍵-值”對,鍵、值可以是任何類型的。
4、props也可以用來注入一組“鍵-值”對,這裏的鍵、值都是字符串類型。
31、什麼是bean wiring?
Wiring,過著說bean Wiring是指beans在Spring容器中結合在一起的情況。當裝配bean的時候,
Spring容器需要知道需要哪些beans以及如何使用依賴注入將它們結合起來。
32、什麼是bean自動裝配?
Spring容器可以自動配置相互協作beans之間的關聯關係。這意味著Spring可以自動配置一個Bean
和其他協作bean之間的關係,通過檢查BeanFactory的內容裏沒有使用和<property>元素。
33、解釋自動裝配的各種模式?
自動裝配提供五種不同的模式供Spring容器用來自動裝配beans之間的依賴注入:
1、no:默認的方式是不進行自動裝配,通過手工設置ref屬性來進行裝配bean。
2、byName:通過參數名自動裝配,Spring容器查找beans的屬性,這些beans在XML配置文件中被設
置為buName。之後容器視圖配置、裝配和該bean的屬性具有相同名字的bean。
3、byType:通過參數的數據類型自動裝配,Spring容器查找beans的屬性,這些beans在XML配置文件
中被設置為byType。之後容器試圖匹配和裝配該bean的屬性類型一樣的bean。如果有多個bean符合
條件,則拋出錯誤。
4、constructor:這個同byType類似,不過是應用於構造函數的參數。如果在BeanFactory中不是恰好
有一個bean與構造函數參數相同類型,則拋出一個嚴重錯誤。
5、autodelect:如果有默認的構造方法,通過construct的方式自動裝配,否則使用byType的方式自
動裝配。
34、自動裝配有哪些局限性?
1、重寫:你仍然需要使用 和<property>設置指明依賴,這意味著總要重寫自動裝配。
2、原生數據類型:你不能自動裝配簡單的屬性,如原生類型、字符串和類。
3、模煳特性:自動裝配總是沒有自定義裝配精確,因此,如果可能盡量使用自定義裝配
35、你可以在Spring中注入null或空字符串嗎?
完全可以
Spring注解
36、什麼是Spring基於Java的配置?給出一些注解的例子
基於Java的配置允許你使用Java的注解進行Spring的大部分配置而非通過傳統的XML文件配置。
以注解@Configuration為例,它用來標記類,說明作為beans的定義,可以被Spring IOC容器使用。
另一個例子是@Bean注解,他表示該方法定義的Bean要被注冊金Spring應用上下文中。
37、什麼是基於注解的容器配置?
另外一種替代XML配置的方式為基於注解的配置,這種方式通過字節元數據裝配組件而非使用尖括號
聲明。開發人員將直接在類中進行配置,通過注解標記相關的類、方法或字段聲明,而不再使用XML
描述bean之間的連線關係。
38、如何開始注解裝配?
注解裝配默認情況下在Spring容器中是不開啟的。如果想要開始覬覦注解的裝配隻需要在Spring配置文件
中配置元素即可。
39、@Required注解
@Required表明bean的屬性必須在配置時設置,可以在bean的定義中明確指定也可以通過自動裝配設置。
如果bean的屬性為什隻,則拋出BeanInitzlizationException異常。
40、@Autowired注解
@Autowored注解提供更加精細的控製,包括自動裝配在何處完成以及如何完成。他可以像@Required一
樣自動裝配setter方法、構造器、屬性或者具有任意名稱和、或多個參數的PN方法。
41、@Qualifier注解
當有多個相同類型的bean而隻有其中的一個需要自動裝配是,將@Qualifier注解和@Autowire注解
結合使用消除這種混淆,指定需要裝配的bean。
Spring數據訪問
42、在Spring框架中如何更有效的使用JDBC?
使用Spring JDBC框架,資源管理以及錯誤處理的代建都會減輕。開發人員隻需要通過statements和queries
語句從數據庫中存取數據。Spring框架紅通過使用模板類能更有效的使用JDBC,也就是所謂的
JDBC Template
43、Jdbc Template
JdbcTemplate類提供了許多方法,為我們與數據庫的交互提供了便利。例如,它可以將數據庫的數據
轉化為原生類型或對象,執行寫好的或可調用的數據庫操作語句,提供自定義的數據庫錯誤處理功能。
44、Spring對DAO的支持
Spring對數據訪問對象(DAO)的支持旨在使它可以與數據訪問技術(如jdbc,hibernate及jdo)fangb
的結合起來工作。這使得我們可以很容易在不同的持久層技術間切換,編碼是也無需擔心會拋出特定
技術的異常。
最後更新:2017-09-08 09:02:46