Spring中的設計模式
IOC:控制反轉
物件控制權由系統內部轉移到外部容器;不需要我們去new了,達到了解耦的目的;
結合DI來說,如果沒有IOC容器,當物件A需要使用到物件B的時候必須自己去建立,對A來說這種依賴是主動的;引入IOC之後,當物件A需要使用到物件B時,可以指定IOC容器建立一個物件B注入到物件A中,此時對A來說這種依賴是被動的,也為控制權反轉的體現;
實現IOC的設計模式:
工廠設計模式:
Spring使用工廠模式通過BeanFactory或ApplicationContext建立bean物件;
BeanFactory: 延遲注入,使用到某個bean時才會注入,佔用更少記憶體,程式啟動速度快;
ApplicationContext: 容器啟東時,一次性建立所有bean;
單例設計模式:
優點: 頻繁使用的物件可省去建立時間,對重量級物件而言,省去一筆系統開銷;
new次數減少,可減輕GC壓力;
Spring中預設單例;
實現方式: <bean id="userService" class="top.snailclimb.UserService" scope="singleton"/> @Scope(value = "singleton")
原始碼通過ConcurrentHashMap實現單例登錄檔: 檢查快取中是否存在例項,如果不存在,註冊到單例登錄檔;
AOP,將與業務無關但為業務模組共同呼叫的邏輯(事務處理,日誌管理,許可權控制)封裝,降低模組間的耦合,提高程式碼複用性,可維護性和可擴充套件性;
代理設計模式:
基於動態代理;如果要代理的物件實現了某介面,Spring AOP使用JDK Proxy建立代理物件,對於沒有實現介面的物件,Spring AOP使用Cglib生成一個被代理物件的子類作為代理;