1.使用spring框架的好處是什麼?
輕量:spring 是輕量的,基本的版本大約2mb。
控制反**spring通過控制反轉實現了鬆散耦合,物件們給出它們的依賴,而不是建立或查詢依賴的物件們。
面向切面的程式設計(aop):spring支援面向切面的程式設計,並且把應用業務邏輯和系統服務分開。
容器:spring 包含並管理應用中物件的生命週期和配置。
事務管理:spring 提供乙個持續的事務管理介面,可以擴充套件到上至本地事務下至全域性事務(jta)。
2.說說aop和ioc/di的概念以及在spring中是如何應用的?
aop,aspect oriented program,面向(方面)切面的程式設計;
ioc,invert of control,控制反轉。物件的例項由容器自動生成,
即用介面程式設計,在程式中不出現new關鍵字,而是用介面來命名引用,
然後通過某種方式把介面的某個實現類的例項注入到引用裡,從而實現介面與具體實現類的松耦合。
由容器控制程式之間的關係(通過xml配置),而非傳統實現中的由程式**直接操控,
依賴注入,是ioc的乙個方面,是個通常的概念,它有多種解釋。這概念是說你不用建立物件,
而只需要描述它如何被建立。你不在**裡直接組裝你的元件和服務,但是要在配置檔案裡描述哪些元件需要哪些服務,
之後乙個容器(ioc容器)負責把他們組裝起來。
簡單說一下,ioc就是其實就是依賴注入,
(在乙個class物件中引用另乙個class物件時,我們通常都是直接通過new contructor)。
控制權由應用**中轉到了外部容器,控制權的轉移,是所謂的反轉。
aop方式很類似filter,就是在程式正常的業務流中間像切面一樣插入很多其他需要執行的**,
比如登入時候,在進入登入頁面前寫入日誌,很常用的,尤其是跟資料庫有關的,或者跟支付有關的程式肯定會在每一步前面插入日誌。
面向方面的程式設計,即 aop,是一種程式設計技術,它允許程式設計師對橫切關注點或橫切典型的職責分界線的行為(例如日誌和事務管理)進行模組化。
aop 的核心構造是方面,它將那些影響多個類的行為封裝到可重用的模組中。
aop advice(aop通知)分為:
前置通知 後置通知 異常通知 環繞通知
3.spring的事物有幾種方式?spring框架的事務管理有哪些優點? 你更傾向用那種事務管理型別?談談spring事物的隔離級別和傳播行為?
程式設計式事務管理:這意味你通過程式設計的方式管理事務,給你帶來極大的靈活性,但是難維護。
宣告式事務管理:這意味著你可以將業務**和事務管理分離,你只需用註解和xml配置來管理事務。
它為不同的事務api 如 jta,jdbc,hibernate,jpa 和jdo,提供乙個不變的程式設計模式。
它為程式設計式事務管理提供了一套簡單的api而不是一些複雜的事務api如
它支援宣告式事務管理。
它和spring各種資料訪問抽象層很好得整合。
大多數spring框架的使用者選擇宣告式事務管理,因為它對應用**的影響最小,
因此更符合乙個無侵入的輕量級容器的思想。宣告式事務管理要優於程式設計式事務管理,
雖然比程式設計式事務管理(這種方式允許你通過**控制事務)少了一點靈活性。
事務的隔離級別:
資料庫系統提供了4種事務隔離級別,在這4種隔離級別中,serializable的隔離級別最高,read uncommitted的隔離級別最低;
· read uncommitted 讀未提交資料;(會出現髒讀)
· read committed 讀已提交資料;
· repeatable read 可重複讀;
事務的傳播屬性包括:
· required業務方法需要在乙個事務中執行,如果乙個方法執行時已經處在乙個事務中,那麼加入到該事務,否則為自己建立乙個新事務,
80%的方法用到該傳播屬性;
· not-supported· requiresnew· mandatoky· supports· never· nested
4.解釋spring框架中bean的生命週期及spring支援的幾種作用域。
spring容器 從xml 檔案中讀取bean的定義,並例項化bean。
spring根據bean的定義填充所有的屬性。
如果bean實現了beannameaware 介面,spring 傳遞bean 的id 到 setbeanname方法。
如果bean 實現了 beanfactoryaware 介面, spring傳遞beanfactory 給setbeanfactory 方法。
如果有任何與bean相關聯的beanpostprocessors,spring會在postprocesserbeforeinitialization()方法內呼叫它們。
如果bean實現intializingbean了,呼叫它的afterpropertyset方法,如果bean宣告了初始化方法,呼叫此初始化方法。
如果有beanpostprocessors 和bean 關聯,這些bean的postprocessafterinitialization() 方法將被呼叫。
如果bean實現了 disposablebean,它將呼叫destroy()方法。
spring框架支援以下五種bean的作用域:
singleton : bean在每個spring ioc 容器中只有乙個例項。
prototype:乙個bean的定義可以有多個例項。
5.面向切面的原理
spring提供了對aop技術的良好封裝,aop稱為面向切面程式設計,就是系統中有很多各不相干的類的方法,在這些眾多的方法中要加入某種系統功能**,例如:加入日誌、許可權判斷、異常處理等,這種應用成為aop。
實現aop功能採用的是**技術,客戶端程式不再呼叫目標,而呼叫**類,**類與目標類對外具有相同的方法宣告,有兩種方式可以實現相同的方法宣告,一是實現相同的介面,而是作為目標的子類在jdk中採用proxy類產生動態**的方式為某個介面生成實現類,如果要為某類個生成子類,則可以用cglib。(動態**這方面的可以參考我的另一篇文章)
在生成的**類的方法中加入系統功能和呼叫目標類的相應方法,系統功能的**以advice物件進行提供,顯然要建立出**物件,至少需要目標類和advice類。
Spring常見面試題
一 spring mvc工作原理二 為什麼要用spring 1 spring能很好的與各大框架進行整合 2 建立物件時,如果我們不用spring需要用工廠模式來建立,這個spring相當於工廠模式已經幫我們做了建立物件的功能 ioc 依賴注入 3 在用hibernate的時候,如果不用spring每...
Spring常見面試題
spring 面試題分析 1.開發中主要使用 spring 的什麼技術 ioc 容器管理各層的元件 使用 aop 配置宣告式事務 整合其他框架.2.簡 述 aop 和 ioc 概 念 aop aspect oriented program,面向 方面 切面的程式設計 filter 過濾器 也是一種 ...
Spring常見面試題
簡化開發,di依賴關係一目了然,ioc容器管理好系統中的bean 相容成熟的框架,hibernate mybatis shiro 各種資料型別訪問框架 模組化設計,即插即用,按需分配 自帶測試元件 宣告式事務,將非功能性 和功能性 分離,事務管理提前宣告 過度設計嫌疑,完美分離了servlet和普通...