Spring IOC 學習一

一、什么是Spring IOC?


所謂IOC就是由spring來負責對象或資源的生命周期和對象之間的關系的,也就是對對象或資源的創建及管理。

二、IOC的四個要點是什么?


一、誰控制了誰?

????????????——傳統模式中當一個對象A 需要另外一個對象B或資源C支持時需要自己主動去new B或加載C 。也就是主動控制對象或資源的獲取。但用了spring 后就會發現 這一切都可以不用自己親自“動手”,IOC就可以幫我們搞定了。所以是Spring IOC 控制了對象和資源

二、控制了什么?

? ? ? ? ? ? ——控制了對象和資源

三、為什么是反轉?

? ? ? ? ? ? ——由原來的主動獲取對象和資源的“正轉方式”,變成了現在完全有IOC幫著分配對象或資源的方式,所以叫反轉。

四、哪些方面反轉了?

? ? ? ? ? ? ——所依賴的對象和資源被反轉。

三、IOC有哪幾種方式提供對象資源?

一、構造器方式注入

? ? ? ? ——構造方法都知道有參和無參兩種,所以我認為可以分為“先天”和“后天”兩種。先天——則是這個對象很牛掰 “出生”就自帶對象;后天——則是需要我們手動注入依賴參數對象(這種我們可以稱之為“指腹為婚”)。

二、setter方法注入

? ? ? ? ——這種方式比較自由是有被注入的對象提供條件生產所需的對象。比如:他需要一個老婆 (set老婆),這個老婆對象是他“定制”的 比如:1、林志玲一樣的聲音;2、高圓圓一樣的容貌;3、劉詩詩一樣的溫柔;4、趙麗穎樣的可愛;5、迪麗熱巴一樣的身高等等。(現實中能娶這樣女人的男人都是家里有礦啊。)

三、接口方式注入

? ? ? ? ——這一種就類似A1類實現A接口一樣。比較霸道,可能要被逼接受一些自己不需要的方法。

四、IOC核心接口類

借鑒該大神的一張圖:https://singleant.iteye.com/blog/1177358

這張圖基本上詮釋了Spring IOC容器的核心接口。當然這張圖是以ClassPathXmlApplicationContext 切入點觀瀾全局的。



另外還有三個點:

XmlWebApplicationContext、GenericXmlApplicationContext、FileSystemXmlApplicationContext 都能回溯到ApplicationContext 核心接口類中

五、IOC 五大核心體系

(1)Resource 體系:

? ? ? ? ? ? ——resource 是spring 對資源的抽象?,他下面的每一個實現類都代表著一種資源訪問的策略:

?????????????UrlResource

????????????FileUrlResource

????????????FileSystemResource

????????????ClassPathResource

????????????ByteArrayResource

???????????? InputStreamResource 以上都是繼承AbstractResource而來,還有一些是直接繼承Resource


上面的只是對資源的抽象封裝,如果要使用那就需要對資源的加載。所以下圖是ResourceLoader ——資源加載器。Spring正是通過下圖結構對Resource資源體系的加載。

(2)BeanFactory體系

? ? ? ? ——BeanFactory體系是整個Spring對Bean的創建和管理的一個工廠。它其中維護者一個重要的參數beanDefinitionMap<String,BeanDefinition>。

????????????????BeanFacoty 有三個直接子類?ListableBeanFactory、HierarchicalBeanFactory?和?AutowireCapableBeanFactory。DefaultListableBeanFactory?為最終默認實現,它實現了所有接口


(3)BeanDefinition體系

? ? ? ? ? ?——是對Spring中的對象的描述或者說封裝


(4)BeanDefinitionReader體系

? ? ? ? ——是對spring配置文件的獲取和解析,并將配置文件的中的內容轉換成IOC容器格式的對象:BeanDefinition 就是上面的。


(5)ApplicationContext體系也是整個Spring IOC最核心的

? ? ? ? ——它是整個spring的容器,他繼承了BeanFactory所有接口,而且自己也擴展了額外的接口。所以可以說是BeanFactory的升級版。

那到底比BeanFactory高級在哪里?如下:

1、繼承 MessageSource,提供國際化的標準訪問策略。

2、繼承 ApplicationEventPublisher ,提供強大的事件機制。

3、擴展 ResourceLoader,可以用來加載多個 Resource,可以靈活訪問不同的資源。

4、對 Web 應用的支持

再來重新看一遍ApplicationContext整個體系圖


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容