每日五題 Spring

2021-07-04 19:09:42 字數 3039 閱讀 6705

控制反** spring通過控制反轉實現了鬆散耦合,物件們給出它們的依賴,而不是建立或查詢依賴的物件們。

面向切面的程式設計(aop): spring支援面向切面的程式設計,並且把應用業務邏輯和系統服務分開。

容器: spring 包含並管理應用中物件的生命週期和配置。

事務管理: spring 提供乙個持續的事務管理介面,可以擴充套件到上至本地事務下至全域性事務(jta)。

異常處理: spring 提供方便的api把具體技術相關的異常(比如由jdbc,hibernate or jdo丟擲的)轉化為一致的unchecked 異常。

aop,aspect oriented program,面向(方面)切面的程式設計;

ioc,invert of control,控制反轉。物件的例項由容器自動生成,

即用介面程式設計,在程式中不出現new關鍵字,而是用介面來命名引用,

然後通過某種方式把介面的某個實現類的例項注入到引用裡,從而實現介面與具體實現類的松耦合。

由容器控制程式之間的關係(通過xml配置),而非傳統實現中的由程式**直接操控,

依賴注入,是ioc的乙個方面,是個通常的概念,它有多種解釋。這概念是說你不用建立物件,而只需要描述它如何被建立。你不在**裡直接組裝你的元件和服務,但是要在配置檔案裡描述哪些元件需要哪些服務,之後乙個容器(ioc容器)負責把他們組裝起來。簡單說一下,ioc就是其實就是依賴注入,(在乙個class物件中引用另乙個class物件時,我們通常都是直接通過new contructor)。控制權由應用**中轉到了外部容器,控制權的轉移,是所謂的反轉。

aop方式很類似filter,就是在程式正常的業務流中間像切面一樣插入很多其他需要執行的**,

比如登入時候,在進入登入頁面前寫入日誌,很常用的,尤其是跟資料庫有關的,或者跟支付有關的程式肯定會在每一

步前面插入日誌。

面向方面的程式設計,即 aop,是一種程式設計技術,它允許程式設計師對橫切關注點或橫切典型的職責分界線的行為(例如日誌和事務管理)進行模組化。

aop 的核心構造是方面,它將那些影響多個類的行為封裝到可重用的模組中。

aop advice(aop通知)分為:

前置通知 後置通知 異常通知 環繞通知

ioc/di,ioc反射機制 ,aop動態**

程式設計式事務管理:這意味你通過程式設計的方式管理事務,給你帶來極大的靈活性,但是難維護。

宣告式事務管理:這意味著你可以將業務**和事務管理分離,你只需用註解和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

readonly提高查詢效率,快取,查詢等做快取沒有意義

答:

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的定義可以有多個例項。

答:

物件導向的程式設計主要注重核心業務,而面向切面程式設計主要關注一些不是核心的業務,但又是必須的輔助功能。

就是把那些不是核心業務應該處理的**提取出來,進行封裝成模組化.來處理那些附加的功能**(如日誌,事務,安全驗證)我們把這個模組的作用理解為乙個切面,告訴我們它是乙個功能模組.我們可以把它看成乙個切面.說白了就是我們寫乙個類,在這個類中寫一些處理在核心業務中起到同樣效果的方法.

我們還要了解兩個關鍵字:

連線點(joinpoint),簡單的理解就是在切面模組中定義的方法.就是上面定義類中的方法.

切入點(pointcut).就是連線點的集合,就是一組方法的集合了. 以下幾個就比較理解了,目標物件就是要處理的核心業務了.**就更容易理解了,讓乙個**去完成這個任務.

關於aop程式設計可關注我另外一篇部落格:

spring aop 學習之動態動態**

Java面試題每日五題 2010 02 26

public void test 然而對於有的類來說,可能有自己邏輯上的相等的概念,而不僅僅是引用的物件是否相同,比如說integer,當兩個數值確實一樣,但是是兩個物件的時候,我們也希望有一種辦法來判定兩者在邏輯上是相等的,所以會改寫object的equals函式,public boolean e...

動態規劃經典五題

雖然最大子矩陣,滑雪,石子合併等問題也足夠經典,我還是從中找了5道最經典的dp寫了這篇博文。有n 件物品和乙個容量為 v的揹包。第 i件物品的費用是 c i 價值是 w i 求解將哪些物品裝入揹包可使價值總和最大。轉移方程 dp i j max dp i 1 j dp i 1 j weight i ...

第五題(重寫,過載)

很基礎的乙個題 談談override,overload,polymorphism override 重寫 覆蓋 overload 過載 polymorphism 多型 override是重寫 覆蓋 了乙個方法,以實現不同的功能。一般是用於 子類在繼承父類時,重寫 重新實現 父類中的方法。重寫 覆蓋 ...