Spring筆試題

、問答題

1.什麼是Spring

答案註釋:Spring是一個開源的Java EE開發框架。Spring框架的核心功能可以應用在任何Java應用程序中,但對Java EE平臺上的Web應用程序有更好的擴展性。Spring框架的目標是使得Java EE應用程序的開發更加簡捷,通過使用POJO爲基礎的編程模型促進良好的編程風格。

2.Spring有哪些優點?

答案註釋:    輕量級:Spring在大小和透明性方面絕對屬於輕量級的,基礎版本的Spring框架大約只有2MB

    控制反轉(IOC)Spring使用控制反轉技術實現了鬆耦合。依賴被注入到對象,而不是創建或尋找依賴對象。

    面向切面編程(AOP): Spring支持面向切面編程,同時把應用的業務邏輯與系統的服務分離開來。

    容器:Spring包含並管理應用程序對象的配置及生命週期。

    MVC框架:Springweb框架是一個設計優良的web MVC框架,很好的取代了一些web框架。

    事務管理:Spring對下至本地業務上至全局業務(JAT)提供了統一的事務管理接口。

    異常處理:Spring提供一個方便的API將特定技術的異常(JDBC, Hibernate, JDO拋出)轉化爲一致的、Unchecked異常。

3.Spring框架有哪些模塊?

答案註釋:Spring框架的基本模塊如下所示:

    Core module

    Bean module

    Context module

    Expression Language module

    JDBC module

    ORM module

    OXM module

    Java Messaging Service(JMS) module

    Transaction module

    Web module

    Web-Servlet module

    Web-Struts module

    Web-Portlet module

4.解釋核心容器(應用上下文)模塊

答案註釋:這是Spring的基本模塊,它提供了Spring框架的基本功能。BeanFactory 是所有Spring應用的核心。Spring框架是建立在這個模塊之上的,這也使得Spring成爲一個容器。

5.BeanFactory – BeanFactory 實例

答案註釋:BeanFactory是工廠模式的一種實現,它使用控制反轉將應用的配置和依賴與實際的應用代碼分離開來。

最常用的BeanFactory實現是XmlBeanFactory類。

6.XmlBeanFactory

答案註釋:最常用的就是org.springframework.beans.factory.xml.XmlBeanFactory,它根據XML文件中定義的內容加載beans。該容器從XML文件中讀取配置元數據,並用它來創建一個完備的系統或應用。

7.解釋AOP模塊

答案註釋:AOP模塊用來開發Spring應用程序中具有切面性質的部分。該模塊的大部分服務由AOP Aliance提供,這就保證了Spring框架和其他AOP框架之間的互操作性。另外,該模塊將元數據編程引入到了Spring

8.解釋抽象JDBCDAO模塊

答案註釋:通過使用抽象JDBCDAO模塊保證了與數據庫連接代碼的整潔與簡單,同時避免了由於未能關閉數據庫資源引起的問題。它在多種數據庫服務器的錯誤信息之上提供了一個很重要的異常層。它還利用SpringAOP模塊爲Spring應用程序中的對象提供事務管理服務。

9.解釋對象/關係映射集成模塊

答案註釋:Spring通過提供ORM模塊在JDBC的基礎上支持對象關係映射工具。這樣的支持使得Spring可以集成主流的ORM框架,包括Hibernate, JDO, iBATIS SQL MapsSpring的事務管理可以同時支持以上某種框架和JDBC

10.解釋web模塊

答案註釋:Springweb模塊建立在應用上下文(application context)模塊之上,提供了一個適合基於web應用程序的上下文環境。該模塊還支持了幾個面向web的任務,如透明的處理多文件上傳請求及將請求參數同業務對象綁定起來。

11.解釋Spring MVC模塊

答案註釋:Spring提供MVC框架構建web應用程序。Spring可以很輕鬆的同其他MVC框架結合,但SpringMVC是個更好的選擇,因爲它通過控制反轉將控制邏輯和業務對象完全分離開來。

12.Spring的配置文件

答案註釋:Spring的配置文件是一個XML文件,文件包含了類信息並描述了這些類是如何配置和互相調用的。

13.Spring IoC容器是什麼?

答案註釋:Spring IOC負責創建對象、管理對象(通過依賴注入)、整合對象、配置對象以及管理這些對象的生命週期。

14.IOC有什麼優點?

答案註釋:IOC或依賴注入減少了應用程序的代碼量。它使得應用程序的測試很簡單,因爲在單元測試中不再需要單例或JNDI查找機制。簡單的實現以及較少的干擾機制使得鬆耦合得以實現。IOC容器支持勤性單例及延遲加載服務。

15.應用上下文是如何實現的?

答案註釋:FileSystemXmlApplicationContext 容器加載XML文件中beans的定義。XML Bean配置文件的完整路徑必須傳遞給構造器。

FileSystemXmlApplicationContext 容器也加載XML文件中beans的定義。注意,你需要正確的設置CLASSPATH,因爲該容器會在CLASSPATH中查看beanXML配置文件。

WebXmlApplicationContext:該容器加載xml文件,這些文件定義了web應用中所有的beans

16.Bean FactoryApplicationContext有什麼區別?

答案註釋:ApplicationContext提供了一種解決文檔信息的方法,一種加載文件資源的方式,他們可以向監聽他們的beans發送消息。另外,容器或者容器中beans的操作,這些必須以bean工廠的編程方式處理的操作可以在應用上下文中以聲明的方式處理。應用上下文實現了MessageSource,該接口用於獲取本地消息,實際的實現是可選的。

17.Spring應用程序看起來像什麼?

答案註釋:    一個定義功能的接口

    實現包括屬性,settergetter方法,功能等

    Spring AOP

    SpringXML配置文件

    使用該功能的客戶端編程

依賴注入

18.Spring中的依賴注入是什麼?

答案註釋:依賴注入作爲控制反轉(IOC)的一個層面,可以有多種解釋方式。在這個概念中,你不用創建對象而只需要描述如何創建它們。你不必通過代碼直接的將組件和服務連接在一起,而是通過配置文件說明哪些組件需要什麼服務。之後IOC容器負責銜接。

19.有哪些不同類型的IOC(依賴注入)

答案註釋:    構造器依賴注入:構造器依賴注入在容器觸發構造器的時候完成,該構造器有一系列的參數,每個參數代表注入的對象。

    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是原型beanSingleton屬性默認設置爲true。因此,spring框架中所有的bean都默認爲單例bean

22.Spring Bean中定義了什麼內容?

答案註釋:Spring Bean中定義了所有的配置元數據,這些配置信息告知容器如何創建它,它的生命週期是什麼以及它的依賴關係。

23.如何向Spring 容器提供配置元數據?

答案註釋:有三種方式向Spring 容器提供元數據:

    XML配置文件

    基於註解配置

    基於Java的配置

24.你如何定義bean的作用域?

答案註釋:在Spring中創建一個bean的時候,我們可以聲明它的作用域。只需要在bean定義的時候通過’scope’屬性定義即可。例如,當Spring需要產生每次一個新的bean實例時,應該聲明beanscope屬性爲prototype。如果每次你希望Spring返回一個實例,應該聲明beanscope屬性爲singleton

25.說一下Spring中支持的bean作用域

答案註釋:Spring框架支持如下五種不同的作用域:

    singleton:在Spring IOC容器中僅存在一個Bean實例,Bean以單實例的方式存在。

    prototype:一個bean可以定義多個實例。

    request:每次HTTP請求都會創建一個新的Bean。該作用域僅適用於WebApplicationContext環境。

    session:一個HTTP Session定義一個Bean。該作用域僅適用於WebApplicationContext環境.

    globalSession:同一個全局HTTP Session定義一個Bean。該作用域同樣僅適用於WebApplicationContext環境.

bean默認的scope屬性是’singleton‘。

26.Spring框架中單例beans是線程安全的嗎?

答案註釋:不是,Spring框架中的單例beans不是線程安全的。

27.解釋Spring框架中bean的生命週期

答案註釋:    Spring容器讀取XML文件中bean的定義並實例化bean

    Spring根據bean的定義設置屬性值。

    如果該Bean實現了BeanNameAware接口,Springbeanid傳遞給setBeanName()方法。

    如果該Bean實現了BeanFactoryAware接口,Springbeanfactory傳遞給setBeanFactory()方法。

    如果任何bean BeanPostProcessors 和該bean相關,Spring調用postProcessBeforeInitialization()方法。

    如果該Bean實現了InitializingBean接口,調用Bean中的afterPropertiesSet方法。如果bean有初始化函數聲明,調用相應的初始化方法。

    如果任何bean BeanPostProcessors 和該bean相關,調用postProcessAfterInitialization()方法。

    如果該bean實現了DisposableBean,調用destroy()方法。

28.哪些是最重要的bean生命週期方法?能重寫它們嗎?

答案註釋:有兩個重要的bean生命週期方法。第一個是setup方法,該方法在容器加載bean的時候被調用。第二個是teardown方法,該方法在bean從容器中移除的時候調用。

bean標籤有兩個重要的屬性(init-method 和 destroy-method),你可以通過這兩個屬性定義自己的初始化方法和析構方法。Spring也有相應的註解:@PostConstruct 和 @PreDestroy

29.什麼是Spring的內部bean

答案註釋:當一個bean被用作另一個bean的屬性時,這個bean可以被聲明爲內部bean。在基於XML的配置元數據中,可以通過把元素定義在 或元素內部實現定義內部bean。內部bean總是匿名的並且它們的scope總是prototype

30.如何在Spring中注入Java集合類?

答案註釋:Spring提供如下幾種類型的集合配置元素:

    list元素用來注入一系列的值,允許有相同的值。

    set元素用來注入一些列的值,不允許有相同的值。

    map用來注入一組”鍵-值”對,鍵、值可以是任何類型的。

    props也可以用來注入一組”鍵-值”對,這裏的鍵、值都字符串類型。

31.什麼是bean wiring

答案註釋:Wiring,或者說bean Wiring是指beansSpring容器中結合在一起的情況。當裝配bean的時候,Spring容器需要知道需要哪些beans以及如何使用依賴注入將它們結合起來。

32.什麼是bean自動裝配?

答案註釋:Spring容器可以自動配置相互協作beans之間的關聯關係。這意味着Spring可以自動配置一個bean和其他協作bean之間的關係,通過檢查BeanFactory 的內容裏沒有使用和< property>元素。

33.解釋自動裝配的各種模式?

答案註釋:自動裝配提供五種不同的模式供Spring容器用來自動裝配beans之間的依賴注入:

    no:默認的方式是不進行自動裝配,通過手工設置ref 屬性來進行裝配bean

    byName:通過參數名自動裝配,Spring容器查找beans的屬性,這些beansXML配置文件中被設置爲byName。之後容器試圖匹配、裝配和該bean的屬性具有相同名字的bean

    byType:通過參數的數據類型自動自動裝配,Spring容器查找beans的屬性,這些beansXML配置文件中被設置爲byType。之後容器試圖匹配和裝配和該bean的屬性類型一樣的bean。如果有多個bean符合條件,則拋出錯誤。

    constructor:這個同byType類似,不過是應用於構造函數的參數。如果在BeanFactory中不是恰好有一個bean與構造函數參數相同類型,則拋出一個嚴重的錯誤。

    autodetect:如果有默認的構造方法,通過 construct的方式自動裝配,否則使用 byType的方式自動裝配。

34.自動裝配有哪些侷限性?

答案註釋:自動裝配有如下侷限性:

    重寫:你仍然需要使用 和< property>設置指明依賴,這意味着總要重寫自動裝配。

    原生數據類型:你不能自動裝配簡單的屬性,如原生類型、字符串和類。

    模糊特性:自動裝配總是沒有自定義裝配精確,因此,如果可能儘量使用自定義裝配。

35.你可以在Spring中注入null或空字符串嗎?

答案註釋:完全可以。

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的屬性未設置,則拋出BeanInitializationException異常。

40.@Autowired 註解

答案註釋:@Autowired 註解提供更加精細的控制,包括自動裝配在何處完成以及如何完成。它可以像@Required一樣自動裝配setter方法、構造器、屬性或者具有任意名稱和/或多個參數的PN方法。

41. @Qualifier 註解

答案註釋:當有多個相同類型的bean而只有其中的一個需要自動裝配時,將@Qualifier 註解和@Autowire 註解結合使用消除這種混淆,指明需要裝配的bean

42.Spring框架中如何更有效的使用JDBC

答案註釋:使用Spring JDBC框架,資源管理以及錯誤處理的代價都會減輕。開發人員只需通過statementsqueries語句從數據庫中存取數據。Spring框架中通過使用模板類能更有效的使用JDBC,也就是所謂的JdbcTemplate(例子)

43.JdbcTemplate

答案註釋:JdbcTemplate類提供了許多方法,爲我們與數據庫的交互提供了便利。例如,它可以將數據庫的數據轉化爲原生類型或對象,執行寫好的或可調用的數據庫操作語句,提供自定義的數據庫錯誤處理功能。

44.SpringDAO的支持

答案註釋:Spring對數據訪問對象(DAO)的支持旨在使它可以與數據訪問技術(如 JDBC, Hibernate JDO)方便的結合起來工作。這使得我們可以很容易在的不同的持久層技術間切換,編碼時也無需擔心會拋出特定技術的異常。

45.使用Spring可以通過什麼方式訪問Hibernate

答案註釋:使用Spring有兩種方式訪問Hibernate

    使用Hibernate Template的反轉控制以及回調方法

    繼承HibernateDAOSupport,並申請一個AOP攔截器節點

46.Spring支持的ORM

答案註釋:Spring支持以下ORM

    Hibernate

    iBatis

    JPA (Java -Persistence API)

    TopLink

    JDO (Java Data Objects)

    OJB

47.如何通過HibernateDaoSupportSpringHibernate結合起來?

答案註釋:使用SpringSessionFactory 調用LocalSessionFactory。結合過程分爲以下三步:

    配置Hibernate SessionFactory

    繼承HibernateDaoSupport實現一個DAO

    使用AOP裝載事務支持

48.Spring支持的事務管理類型

答案註釋:Spring支持如下兩種方式的事務管理:

    編程式事務管理:這意味着你可以通過編程的方式管理事務,這種方式帶來了很大的靈活性,但很難維護。

    聲明式事務管理:這種方式意味着你可以將事務管理和業務代碼分離。你只需要通過註解或者XML配置管理事務。

49.Spring框架的事務管理有哪些優點?

答案註釋:    它爲不同的事務API(JTA, JDBC, Hibernate, JPA, JDO)提供了統一的編程模型。

    它爲編程式事務管理提供了一個簡單的API而非一系列複雜的事務API(JTA).

    它支持聲明式事務管理。

    它可以和Spring 的多種數據訪問技術很好的融合。

50.你更推薦那種類型的事務管理?

答案註釋:許多Spring框架的用戶選擇聲明式事務管理,因爲這種方式和應用程序的關聯較少,因此更加符合輕量級容器的概念。聲明式事務管理要優於編程式事務管理,儘管在靈活性方面它弱於編程式事務管理(這種方式允許你通過代碼控制業務)

51.解釋AOP

答案註釋:面向切面編程,AOP允許程序員模塊化橫向業務邏輯,或定義核心部分的功能,例如日誌管理和事務管理。

52.切面(Aspect)

答案註釋:AOP的核心就是切面,它將多個類的通用行爲封裝爲可重用的模塊。該模塊含有一組API提供 cross-cutting功能。例如,日誌模塊稱爲日誌的AOP切面。根據需求的不同,一個應用程序可以有若干切面。在Spring AOP中,切面通過帶有@Aspect註解的類實現。

53.Spring AOPconcern和 cross-cutting concern的區別是什麼?

答案註釋:Concern(核心邏輯):表示在應用程序中一個模塊的行爲。Concern可以定義爲我們想要實現的功能。

Cross-cutting concern(橫向的通用邏輯):指的是整個應用程序都會用到的功能,它影響整個應用程序。例如,日誌管理(Logging)、安全管理(Security)以及數據交互是應用程序的每個模塊都要涉及到的,因此這些都屬於Cross-cutting concern

54.連接點(Join point)

答案註釋:連接點代表應用程序中插入AOP切面的地點。它實際上是Spring AOP框架在應用程序中執行動作的地點。

55.通知(Advice)

答案註釋:通知表示在方法執行前後需要執行的動作。實際上它是Spring AOP框架在程序執行過程中觸發的一些代碼。

Spring切面可以執行一下五種類型的通知:

    before(前置通知):在一個方法之前執行的通知。

    after(最終通知):當某連接點退出的時候執行的通知(不論是正常返回還是異常退出)。

    after-returning(後置通知):在某連接點正常完成後執行的通知。

    after-throwing(異常通知):在方法拋出異常退出時執行的通知。

    around(環繞通知):在方法調用前後觸發的通知。

56.切入點(Pointcut)

答案註釋:切入點是一個或一組連接點,通知將在這些位置執行。可以通過表達式或匹配的方式指明切入點。

57.什麼是引入?

答案註釋:引入允許我們在已有的類上添加新的方法或屬性。

58.什麼是目標對象?

答案註釋:被一個或者多個切面所通知的對象。它通常是一個代理對象。也被稱做被通知(advised)對象。

59.什麼是代理?

答案註釋:代理是將通知應用到目標對象後創建的對象。從客戶端的角度看,代理對象和目標對象是一樣的。

60.有幾種不同類型的自動代理?

答案註釋:    BeanNameAutoProxyCreatorbean名稱自動代理創建器

    DefaultAdvisorAutoProxyCreator:默認通知者自動代理創建器

    Metadata autoproxying:元數據自動代理

61.什麼是織入?什麼是織入應用的不同點?

答案註釋:織入是將切面和其他應用類型或對象連接起來創建一個通知對象的過程。織入可以在編譯、加載或運行時完成。

62.解釋基於XML Schema方式的切面實現

答案註釋:在這種情況下,切面由使用XML文件配置的類實現。

63.解釋基於註解方式(基於@AspectJ)的切面實現

答案註釋:在這種情況下(基於@AspectJ的實現),指的是切面的對應的類使用Java 5註解的聲明方式。

64.什麼是SpringMVC框架?

答案註釋:Spring提供了一個功能齊全的MVC框架用於構建Web應用程序。Spring框架可以很容易的和其他的MVC框架融合(Struts),該框架使用控制反轉(IOC)將控制器邏輯和業務對象分離開來。它也允許以聲明的方式綁定請求參數到業務對象上。

65.DispatcherServlet

答案註釋:SpringMVC框架圍繞DispatcherServlet來設計的,它用來處理所有的HTTP請求和響應。

66.WebApplicationContext

答案註釋:WebApplicationContext繼承了ApplicationContext,並添加了一些web應用程序需要的功能。和普通的ApplicationContext 不同,WebApplicationContext可以用來處理主題樣式,它也知道如何找到相應的servlet

67.什麼是Spring MVC框架的控制器?

答案註釋:控制器提供對應用程序行爲的訪問,通常通過服務接口實現。控制器解析用戶的輸入,並將其轉換爲一個由視圖呈現給用戶的模型。Spring 通過一種極其抽象的方式實現控制器,它允許用戶創建多種類型的控制器。

68.@Controller annotation

答案註釋:@Controller註解表示該類扮演控制器的角色。Spring不需要繼承任何控制器基類或應用Servlet API

69.@RequestMapping annotation

答案註釋:@RequestMapping註解用於將URL映射到任何一個類或者一個特定的處理方法上。


 由“Spring筆試題庫”收集整理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章