新聞中心
企業(yè)建站必須是能夠以充分展現(xiàn)企業(yè)形象為主要目的,是企業(yè)文化與產(chǎn)品對(duì)外擴(kuò)展宣傳的重要窗口,一個(gè)合格的網(wǎng)站不僅僅能為公司帶來(lái)巨大的互聯(lián)網(wǎng)上的收集和信息發(fā)布平臺(tái),創(chuàng)新互聯(lián)建站面向各種領(lǐng)域:成都格柵板等成都網(wǎng)站設(shè)計(jì)、營(yíng)銷(xiāo)型網(wǎng)站解決方案、網(wǎng)站設(shè)計(jì)等建站排名服務(wù)。
前言:
最近很多小伙伴都在準(zhǔn)備春招,所以筆者我也盡可能的給大家多分享一些面經(jīng)跟面試題,供大家參考學(xué)習(xí),給大家提供一個(gè)學(xué)習(xí)上的幫助,文末有福利領(lǐng)取
Spring高級(jí)面試專(zhuān)題錦集
什么是 Spring 框架?Spring 框架有哪些主要模塊?
使用 Spring 框架能帶來(lái)哪些好處?
什么是控制反轉(zhuǎn)(IOC)?什么是依賴(lài)注入?
請(qǐng)解釋下 Spring 框架中的 IoC?
BeanFactory 和 ApplicationContext 有什么區(qū)別?
Spring 有幾種配置方式?
如何用基于 XML 配置的方式配置 Spring?
如何用基于 Java 配置的方式配置 Spring?
怎樣用注解的方式配置 Spring?
請(qǐng)解釋 Spring Bean 的生命周期?
1、什么是 Spring 框架?Spring 框架有哪些主要模塊?
Spring 框架是一個(gè)為 Java 應(yīng)用程序的開(kāi)發(fā)提供了綜合、廣泛的基礎(chǔ)性支持的 Java 平臺(tái)。Spring 幫助開(kāi)發(fā)者解決了開(kāi)發(fā)中基礎(chǔ)性的問(wèn)題,使得開(kāi)發(fā)人員可以專(zhuān)注于應(yīng)用程序的開(kāi)發(fā)。Spring 框架本身亦是按照設(shè)計(jì)模式精心打造,這使得我們可以在開(kāi)發(fā)環(huán)境中安心的集成Spring 框架,不必?fù)?dān)心 Spring 是如何在后臺(tái)進(jìn)行工作的。Spring 框架至今已集成了 20 多個(gè)模塊。這些模塊主要被分如下圖所示的核心容器、數(shù)據(jù)訪問(wèn)/集成,、Web、AOP(面向切面編程)、工具、消息和測(cè)試模塊。
2、使用 Spring 框架能帶來(lái)哪些好處?
下面列舉了一些使用 Spring 框架帶來(lái)的主要好處:
Dependency Injection(DI) 方法使得構(gòu)造器和 JavaBean properties 文件中的依賴(lài)關(guān)系一目了然。
與 EJB 容器相比較,IoC 容器更加趨向于輕量級(jí)。這樣一來(lái)IoC 容器在有限的內(nèi)存和 CPU 資源的情況下進(jìn)行應(yīng)用程序的開(kāi)發(fā)和發(fā)布就變得十分有利。
Spring 并沒(méi)有閉門(mén)造車(chē),Spring 利用了已有的技術(shù)比如ORM 框架、logging 框架、J2EE、Quartz 和 JDK Timer,以及其他視圖技術(shù)。
Spring 框架是按照模塊的形式來(lái)組織的。由包和類(lèi)的編號(hào)就可以看出其所屬的模塊,開(kāi)發(fā)者僅僅需要選用他們需要的模塊即可。
要測(cè)試一項(xiàng)用 Spring 開(kāi)發(fā)的應(yīng)用程序十分簡(jiǎn)單,因?yàn)闇y(cè)試相關(guān)的環(huán)境代碼都已經(jīng)囊括在框架中了。更加簡(jiǎn)單的是,利用JavaBean 形式的 POJO 類(lèi),可以很方便的利用依賴(lài)注入來(lái)寫(xiě)入測(cè)試數(shù)據(jù)。
Spring 的 Web 框架亦是一個(gè)精心設(shè)計(jì)的 Web MVC 框架,為開(kāi)發(fā)者們?cè)?web 框架的選擇上提供了一個(gè)除了主流框架比如Struts、過(guò)度設(shè)計(jì)的、不流行 web 框架的以外的有力選項(xiàng)。
Spring 提供了一個(gè)便捷的事務(wù)管理接口,適用于小型的本地事物處理(比如在單 DB 的環(huán)境下)和復(fù)雜的共同事物處理(比如利用 JTA 的復(fù)雜 DB 環(huán)境)。
3、什么是控制反轉(zhuǎn)(IOC)?什么是依賴(lài)注入?
控制反轉(zhuǎn)是應(yīng)用于軟件工程領(lǐng)域中的,在運(yùn)行時(shí)被裝配器對(duì)象來(lái)綁定耦合對(duì)象的一種編程技巧,對(duì)象之間耦合關(guān)系在編譯時(shí)通常是未知的。在傳統(tǒng)的編程方式中,業(yè)務(wù)邏輯的流程是由應(yīng)用程序中的早已被設(shè)定好關(guān)聯(lián)關(guān)系的對(duì)象來(lái)決定的。在使用控制反轉(zhuǎn)的情況下,業(yè)務(wù)邏輯的流程是由對(duì)象關(guān)系圖來(lái)決定的,該對(duì)象關(guān)系圖由裝配器負(fù)責(zé)實(shí)例化,這種實(shí)現(xiàn)方式還可以將對(duì)象之間的關(guān)聯(lián)關(guān)系的定義抽象化。而綁定的過(guò)程是通過(guò)“依賴(lài)注入”實(shí)現(xiàn)的。
控制反轉(zhuǎn)是一種以給予應(yīng)用程序中目標(biāo)組件更多控制為目的設(shè)計(jì)范式,并在我們的實(shí)際工作中起到了有效的作用。
依賴(lài)注入是在編譯階段尚未知所需的功能是來(lái)自哪個(gè)的類(lèi)的情況下,將其他對(duì)象所依賴(lài)的功能對(duì)象實(shí)例化的模式。這就需要一種機(jī)制用來(lái)激活相應(yīng)的組件以提供特定的功能,所以依賴(lài)注入是控制反轉(zhuǎn)的基礎(chǔ)。否則如果在組件不受框架控制的情況下,框架又怎么知道要?jiǎng)?chuàng)建哪個(gè)組件?
在 Java 中依然注入有以下三種實(shí)現(xiàn)方式:
構(gòu)造器注入
Setter 方法注入
接口注入
4、請(qǐng)解釋下 Spring 框架中的 IoC?
Spring 中的 org.spring framework.beans 包和org.spring framework.context 包構(gòu)成了 Spring 框架 IoC 容器的基礎(chǔ)。
Bean Factory 接口提供了一個(gè)先進(jìn)的配置機(jī)制,使得任何類(lèi)型的對(duì)象的配置成為可能。Application Context 接口對(duì)Bean Factory(是一個(gè)子接口)進(jìn)行了擴(kuò)展,在 Bean Factory 的基礎(chǔ)上添加了其他功能,比如與 Spring 的 AOP 更容易集成,也提供了處理 message resource 的機(jī)制(用于國(guó)際化)、事件傳播以及應(yīng)用層的特別配置,比如針對(duì) Web 應(yīng)用的 Web Application Context。
org.spring framework.beans.factory.Bean Factory 是 Spring IOC 容器的具體實(shí)現(xiàn),用來(lái)包裝和管理前面提到的各種bean Bean Factory 接口是 Spring IoC 容器的核心接口。
5、Bean Factory 和 Application Context 有什么區(qū)別?
Bean Factory 可以理解為含有 bean 集合的工廠類(lèi)。Bean Factory 包含了種 bean 的定義,以便在接收到客戶(hù)端請(qǐng)求時(shí)將對(duì)應(yīng)的 bean 實(shí)例化。
Bean Factory 還能在實(shí)例化對(duì)象的時(shí)生成協(xié)作類(lèi)之間的關(guān)系。此舉將 bean 自身與 bean 客戶(hù)端的配置中解放出來(lái)。Bean Factory 還包含了 bean 生命周期的控制,調(diào)用客戶(hù)端的初始化方法(initialization methods)和銷(xiāo)毀方法(destruction methods)。
從表面上看,application context 如同 bean factory 一樣具有 bean 定義、bean 關(guān)聯(lián)關(guān)系的設(shè)置,根據(jù)請(qǐng)求分發(fā) bean 的功能。但 application context 在此基礎(chǔ)上還提供了其他的功能。
1. 提供了支持國(guó)際化的文本消息
2. 統(tǒng)一的資源文件讀取方式
3. 已在監(jiān)聽(tīng)器中注冊(cè)的 bean 的事件
以下是三種較常見(jiàn)的Application Context 實(shí)現(xiàn)方式:
1、Class PathXml Application Context:從 classpath 的 XML 配置文件中讀取上下文,并生成上下文定義。應(yīng)用程序上下文從程序環(huán)境變量中取得。
1\.?ApplicationContext?context?=?newClassPathXmlApplicationContext(“bean.xml”);
2、File System XML Application Context :由文件系統(tǒng)中的XML 配置文件讀取上下文。
1\.?ApplicationContext?context?=?newFileSystemXmlApplicationContext(“bean.xml”);
3、XML Web Application Context:由 Web 應(yīng)用的 XML 文件讀取上下文。
由于篇幅限制,剩下的將以圖片形式展示,對(duì)文章中學(xué)習(xí)腦圖感興趣的可以 關(guān)注 轉(zhuǎn)發(fā)后私信【資料】即可領(lǐng)取。
Spring Bean 的作用域之間有什么區(qū)別?
什么是 Spring inner beans?
Spring 框架中的單例 Beans 是線(xiàn)程安全的么?
請(qǐng)舉例說(shuō)明如何在Spring中注入一個(gè)JavaCollection?
如何向SpringBean中注入一個(gè)Java.util.Properties?
請(qǐng)解釋SpringBean的自動(dòng)裝配?
請(qǐng)解釋自動(dòng)裝配模式的區(qū)別?
如何開(kāi)啟基于注解的自動(dòng)裝配?
請(qǐng)舉例解釋@Required注解?
請(qǐng)舉例解釋@Autowired注解?
請(qǐng)舉例說(shuō)明@Qualifier注解?
構(gòu)造方法注入和設(shè)值注入有什么區(qū)別?
Spring框架中有哪些不同類(lèi)型的事件?
FileSystemResource和ClassPathResource有何區(qū)別?
Spring框架中都用到了哪些設(shè)計(jì)模式?
對(duì)文章中學(xué)習(xí)腦圖感興趣的可以 關(guān)注 我的供種浩 Java周某人 即可領(lǐng)取。還有更多面試題整理中,可以一并獲取。
新聞標(biāo)題:每日刷題:五分鐘備戰(zhàn)春招,你也能輕松過(guò)關(guān)Spring
瀏覽地址:http://fisionsoft.com.cn/article/igpeje.html