Spring最根本的使命就是爲了簡化java開發
。爲了下降java開發的複雜性,Spring採起了如下的4中策略:java
基於POJO的輕量性和最小侵入性編程編程
經過依賴注入和麪向接口實現鬆耦合安全
基於切面和慣例進行聲明式編程框架
經過切面和模板減小樣板式代碼測試
POJO類就是一個類,包含了一堆屬性,還有get、set方法。Spring想要的就是這樣簡單。你爲了使用Spring,不須要修改原有的POJO類。不須要像EJB那樣,繼承一些必需要繼承和實現的方法。其實,這就是框架對你代碼的侵入
。形成的結果就是,你的代碼與框架牢牢地耦合在一塊兒。那究竟是誰服務誰呢?(框架服務你仍是你服務框架)this
Spring竭力避免因自身的API而弄亂你的代碼。Spring不會強迫你實現Spring規範的藉口或繼承Spring規範的類。最壞的狀況是,你的代碼中加有Spring的註解。日誌
依賴注入就是爲了解耦。耦合具備兩面性:一方面,緊密耦合的代碼難以測試,難以複用,難以理解。另外一方面耦合又是必須的,徹底的耦合那就根本成不了一個系統。
對於依賴注入是怎麼解耦的,能夠這樣比喻。之前你的代碼裏須要一把斧子,那你就new出一把斧子(注意:這裏已經發生耦合)。如今有了依賴注入,你須要斧子的時候,Spring就會提供給你,至關於有一個斧子工廠同樣。code
AOP容許你把遍及應用各處的功能分離出來造成可重用的組件。這些功能包括日誌、安全檢查、事務管理等。就拿日誌來講,若是不適用AOP,你可能把日誌功能分散的寫到各個業務邏輯類中(一改全都須要改),或者把日誌功能抽象成一個公共的類。但系統中仍是存在不少同樣的方法調用。這個時候若是使用AOP就能夠作到最小的侵入性。繼承
public class LogUtil{ public void doItBefore(){ System.out.println("do it before"); } public void doItAfter(){ System.out.println("do it after"); } } public class Business{ private LogUtil log; public Business(LogUtil log){ this.log = log; } public void do(){ //日誌 log.doItBefore(); //業務邏輯---開始 System.out.println("do it"); //業務邏輯---結束 //日誌 log.doItAfter(); } }
業務類Business須要知道日誌類LogUtil的存在嗎?使用AOP,在Spring的配置文件中進行配置就能夠了,Business類不須要作任何的改變。接口
最多見的模板代碼就是jdbc的那些代碼,開頭和結尾基本上都相同,但與業務邏輯絕不相關,還不能不寫。使用模板就是能夠消除這些樣式代碼,使精力集中在業務邏輯的處理上。