Spring(一):基礎學習之IOC

Spring Ioc與AOP相關知識總結

1. 什麼是 Spring 框架?

Spring 是一種輕量級開發框架,旨在提高開發人員的開發效率以及系統的可維護性。

核心模塊:(項目中會使用到)
Spring Core: 基礎,可以說 Spring 其他所有的功能都需要依賴於該類庫。(核心容器)主要提供 IoC 依賴注入功能。
Spring Aspects : 該模塊爲與AspectJ的集成提供支持。
Spring AOP :提供了面向切面的編程實現。
Spring JDBC : Java數據庫連接。
Spring JMS :Java消息服務。
Spring ORM : 用於支持Hibernate等ORM工具。
Spring Web : 爲創建Web應用程序提供支持。
Spring Test : 提供了對 JUnit 和 TestNG 測試的支持。

2. 談談自己對於 Spring IoC 的理解

IoC

Ioc(Inverse of Control):控制反轉,是一種設計思想,用於實現對象之間解耦。
在spring中,對象的創建由Ioc容器接管,同時對象的依賴關係也有Ioc容器來控制(依賴注入【DI】)。
減低對象之間的耦合的好處在於:代碼易於擴展,不會出現牽一髮動全身的現象;同時IOC容器,管理對象創建與對象依賴關係(依賴注入DI)好處在於:程序開發中,不需要再花費過多的精力去new一個又一個對象,同時完成其對象的注入,而是關注於對象本身和業務邏輯。

SpringIoc初始化過程(個人認爲,當前階段沒必要太過於執着於源碼,瞭解其設計思想,實現流程以及流程中關鍵類與方法即可)。

設計思想:工廠模式
過程:
javaBean的創建過程
描述:==Spring應用上下文(ApplicationContext)掃描解析所有配置資源(包括Xml配置以及class文件),通過映射來獲取XML配置的相關類,或者註解(@Component)標註的類,然後在將這些類解析爲BeanDefinition (Definition:翻譯過來就是定義的意思),並將其注入BeanDefinationMap這樣的一個Map中(實際情況並不如此,又些許差異);最後將其註冊到BeanFactory,在Bean工廠中還有一系列的後置器,完成一些後續操作,至此Ioc容器創建bean的流程大致如此,==至於其中關於javabean單例模式的實現與自動裝配(DI)以及很多註冊器,不是你關注的重點,後續學習可以繼續瞭解(AutowireCapableBeanFactory和SingletonBeanRegistry等)。

注:(1)BeanDefinition是一個模板類(bean的頂級接口:決定javaBean長什麼樣子),規定了一些諸如類的加載方式,屬性,依賴關係,是否需要調用初始化方法、銷燬方法等。

有興趣的可以根據以下類圖詳細學習Ioc容器的具體機制以及相關原理:(後期學習)

beanFactory依賴關係

重點說下下面三個類的大致作用:

  • ListableBeanFactory:該接口定義了訪問容器中 Bean 基本信息的若干方法,如查看Bean 的個數、獲取某一類型 Bean 的配置名、查看容器中是否包括某一 Bean 等方法;(簡單理解就是預防javabean的重複註冊)
  • HierarchicalBeanFactory:父子級聯 IoC 容器的接口,子容器可以通過接口方法訪問父容器; 通過HierarchicalBeanFactory 接口: Spring 的 IoC 容器可以建立父子層級關聯的容器體系,子容器可以訪問父容器中的 Bean,但父容器不能訪問子容器的 Bean。Spring 使用父子容器實現了很多功能,比如在 Spring MVC 中,展現層 Bean 位於一個子容器中,而業務層和持久層的 Bean 位於父容器中。這樣,展現層 Bean 就可以引用業務層和持久層的 Bean,而業務層和持久層的 Bean 則看不到展現層的 Bean。(可以理解爲定義bean之間的依賴關係

注:Hierarchical [ˌhaɪəˈrɑːkɪkl] :層次結構

  • ConfigurableBeanFactory:是一個重要的接口,增強了 IoC 容器的可定製性,它定義了設置類裝載器、屬性編輯器、容器初始化後置處理器等方法;(Spring的定製開發關鍵類)

額外擴展

spring進行定製化功能擴展

常見的javabean相關的PostProcessor(後置器)
在這裏插入圖片描述

重點描述下上述後置器的三種項目中可能用到的

  1. BeanFactoryPostProcessor
    beanFactory後置處理器,支持在bean factory標準初始化完成後,對bean factory進行一些額外處理。在講context初始化流程時介紹過,這時所有的bean的描述信息已經加載完畢,但是還沒有進行bean初始化。例如PropertyPlaceholderConfigurer,就是在這個擴展點上對bean屬性中的佔位符進行替換。
  2. BeanDefinitionRegistryPostProcessor
    擴展自BeanFactoryPostProcessor,在執行BeanFactoryPostProcessor的功能前,提供了可以添加bean definition的能力,允許在初始化一般bean前,註冊額外的bean。例如可以在這裏根據bean的scope創建一個新的代理bean。
  3. BeanPostProcessor
    提供了在bean初始化之前和之後插入自定義邏輯的能力。與BeanFactoryPostProcessor的區別是處理的對象不同,BeanFactoryPostProcessor是對beanfactory進行處理,BeanPostProcessor是對bean進行處理。

總結:

自己理解:

  • springIOC容器其實是工廠模式的一種體現。在籠統地講下,就是資源與資源之間有內在/外在聯繫,但是資源的整合卻不由資源本身自己完成,而是交給與之不相干的第三方來完成。這樣降低了資源之間的耦合性(降低了資源之間的依賴程度),同時也實現了資源的統一管理。
  • 舉例說明:做一盤蛋炒飯,你首先需要調料,飯,雞蛋等資源;IOC容器現在就是一臺做蛋炒飯的機器,平時調料,飯,雞蛋等資源都會放在冰箱裏,互不聯繫(此狀態下無耦合);當需要做蛋炒飯時,這臺機器工作,調料,飯,雞蛋等資源纔會產生聯繫;那麼平日裏我們只需要保證調料,飯,雞蛋等資源(量是否充足)即可,並不需要維護調料,飯,雞蛋等資源之間的關係(即關注於資源本身而非資源間的聯繫)。

道友們,如果覺得有所幫助,點個贊再走唄!

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章