Spring的一些基本概念(面試備用哦)

1.什麼是Spring, 它有什麼特色? 包括哪些內容?

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

◆  輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架能夠在一個大小隻有1MB多的JAR文件裏發佈。並 且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應用中的對象不依賴於Spring的特定類。spring

◆  控制反轉——Spring經過一種稱做控制反轉(IoC)的技術促進了鬆耦 合。當應用了IoC,一個對象依賴的其它對象會經過被動的方式傳遞進來,而不是這個對象本身建立或者查找依賴對象。你能夠認爲IoC與JNDI相反——不 是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。數據庫

◆  面向切面——Spring提供了面向切面編程的豐富支持,容許經過分離應用的 業務邏輯與系統級服務(例如審計(auditing)和事務()管理)進行內聚性的開發。應用對象只實現它們應該作的——完成業務邏輯——僅此而已。它們 並不負責(甚至是意識)其它的系統級關注點,例如日誌或事務支持。編程

◆  容器——Spring包含並管理應用對象的配置和生命週期,在這個意義上它是 一種容器,你能夠配置你的每一個bean如何被建立——基於一個可配置原型(prototype),你的bean能夠建立一個單獨的實例或者每次須要時都生 成一個新的實例——以及它們是如何相互關聯的。然而,Spring不該該被混同於傳統的重量級的EJB容器,它們常常是龐大與笨重的,難以使用。設計模式

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

* 核心技術 IoC 和 AOP架構

    * 數據訪問 (持久層解決方案)app

    * Web層解決方案  SpringMVC框架

    * 集成 (整合其餘開源框架)模塊化


2.使用Spring有什麼好處?(選幾點說明白就好)

◆Spring能有效地組織你的中間層對象,不管你是否選擇使用了EJB。若是你僅僅使用了Struts或其餘的包含了J2EE特有APIs的 framework,你會發現Spring關注了遺留下的問題,。

◆Spring能消除在許多工程上對Singleton的過多使用。根據個人經驗,這是一個主要的問題,它減小了系統的可測試性和麪向對象特性。

◆Spring能消除使用各類各樣格式的屬性定製文件的須要,在整個應用和工程中,可經過一種 一致的方法來進行配置。曾經感到迷惑,一個特定類要查找迷幻般的屬性關鍵字或系統屬性,爲此不得不讀Javadoc乃至源編碼嗎?有了Spring,你可 很簡單地看到類的JavaBean屬性。倒置控制的使用(在下面討論)幫助完成這種簡化。

◆Spring能經過接口而不是類促進好的編程習慣,減小編程代價到幾乎爲零。

◆Spring被設計爲讓使用它建立的應用盡量少的依賴於他的APIs。在Spring應用中的大多數業務對象沒有依賴於Spring。

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

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

◆Spring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,它們適於許多web應用。例如,Spring能使用 AOP提供聲明性事務而不經過使用EJB容器,若是你僅僅須要與單個的數據庫打交道,甚至不須要JTA實現。

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

Spring確實使你能經過最簡單可行的解決辦法解決你的問題。這些特性是有很大價值的。

總結起來,Spring有以下優勢:

◆低侵入式設計,代碼污染極低

◆ 獨立於各類應用服務器,能夠真正實現Write Once,Run Anywhere的承諾

◆Spring的DI機制下降了業務對象替換的複雜性

◆Spring並不徹底依賴於Spring,開發者可自由選用Spring框架的部分或所有


3.什麼是IOC,什麼又是DI,他們有什麼區別?

依賴注入DI是一個程序設計模式和架構模型, 一些時候也稱做控制反轉,儘管在技術上來說,依賴注入是一個IOC的特殊實現,依賴注入是指一個對象應用另一個對象來提供一個特殊的能力,例如:把一個 數據庫鏈接已參數的形式傳到一個對象的結構方法裏面而不是在那個對象內部自行建立一個鏈接。控制反轉和依賴注入的基本思想就是把類的依賴從類內部轉化到外 部以減小依賴

應用控制反轉,對象在被建立的時候,由一個調控系統內全部對象的外界實體,將其所依賴的對象的引用,傳遞給它。也能夠說,依賴被注入到對象中。所 以,控制反轉是,關於一個對象如何獲取他所依賴的對象的引用,這個責任的反轉。

 

 


4.什麼是aop,aop的做用是什麼?

面向切面編程(AOP)提供另一種角度來思考程序結構,經過這種方式彌補了面向對象編程(OOP)的不足,除了類(classes)之外,AOP提供了切面。切面對關注點進行模塊化,例如橫切多個類型和對象的事務管理

Spring的一個關鍵的組件就是AOP框架,能夠自由選擇是否使用AOP

提供聲明式企業服務,特別是爲了替代EJB聲明式服務。最重要的服務是聲明性事務管理,這個服務創建在Spring的抽象事物管理之上

容許用戶實現自定義切面,用AOP來完善OOP的使用

能夠把Spring AOP看做是對Spring的一種加強

 

 


5.介紹一下Spring的事務管理:

事務就是對一系列的數據庫操做(好比插入多條數據)進行統一的提交或回滾操做,若是插入成功,那麼一塊兒成功,若是中間有一條出現異常,那麼回滾之 前的全部操做。

這樣能夠防止出現髒數據,防止數據庫數據出現問題。

開發中爲了不這種狀況通常都會進行事務管理。Spring中也有本身的事務管理機制,通常是使用TransactionMananger進行管 理,能夠經過Spring的注入來完成此功能。

spring提供了幾個關於事務處理的類:

TransactionDefinition   //事務屬性定義

TranscationStatus   //表明了當前的事務,能夠提交,回滾。

PlatformTransactionManager這個是spring提供的用於管理事務的基礎接口,其下有一個實現的抽象類 AbstractPlatformTransactionManager,咱們使用的事務管理類例如 DataSourceTransactionManager等都是這個類的子類。

通常事務定義步驟:

TransactionDefinition td = new TransactionDefinition();

TransactionStatus ts = transactionManager.getTransaction(td);

try

{ //do sth

  transactionManager.commit(ts);

}

catch(Exception e){

  transactionManager.rollback(ts);

}

spring提供的事務管理能夠分爲兩類:編程式的和聲明式的。編程式的,比較靈活,可是代碼量大,存在重複的代碼比較多;聲明式的比編程式的更 靈活。

編程式主要使用transactionTemplate。省略了部分的提交,回滾,一系列的事務對象定義,需注入事務管理對象.

void add(){

  transactionTemplate.execute( new TransactionCallback(){

  pulic Object doInTransaction(TransactionStatus ts)

  { //do sth}

}

}

聲明式:

使用TransactionProxyFactoryBean:

PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED,readOnly

圍繞Poxy的動態代理 可以自動的提交和回滾事務

org.springframework.transaction.interceptor.TransactionProxyFactoryBean

PROPAGATION_REQUIRED–支持當前事務,若是當前沒有事務,就新建一個事務。這是最多見的選擇。

PROPAGATION_SUPPORTS–支持當前事務,若是當前沒有事務,就以非事務方式執行。

PROPAGATION_MANDATORY–支持當前事務,若是當前沒有事務,就拋出異常。

PROPAGATION_REQUIRES_NEW–新建事務,若是當前存在事務,把當前事務掛起。

PROPAGATION_NOT_SUPPORTED–以非事務方式執行操做,若是當前存在事務,就把當前事務掛起。

PROPAGATION_NEVER–以非事務方式執行,若是當前存在事務,則拋出異常。

PROPAGATION_NESTED–若是當前存在事務,則在嵌套事務內執行。若是當前沒有事務,則進行與 PROPAGATION_REQUIRED相似的操做。

 


6.爲何要有事務傳播行爲?

 

 

 7...

8...

9...

  知識點是背不完的,對於每一個知識點,應該有本身的或者整合他人得出來的看法,記憶才更深入,答題時口述纔會更清晰。

相關文章
相關標籤/搜索