中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring中IoC容器知識點有哪些

發布時間:2021-08-17 11:40:43 來源:億速云 閱讀:119 作者:小新 欄目:編程語言

小編給大家分享一下Spring中IoC容器知識點有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

可以把 Spring IoC 容器比作一間餐館,當你來到餐館,通常會直接招呼服務員:點菜!至于菜的原料是什么?如何用原料把菜做出來?可能你根本就不關心。IoC 容器也是一樣,你只需要告訴它需要某個bean,它就把對應的實例(instance)扔給你,至于這個bean是否依賴其他組件,怎樣完成它的初始化,根本就不需要你關心。

作為餐館,想要做出菜肴,得知道菜的原料和菜譜,同樣地,IoC 容器想要管理各個業務對象以及它們之間的依賴關系,需要通過某種途徑來記錄和管理這些信息。BeanDefinition對象就承擔了這個責任:容器中的每一個 bean 都會有一個對應的 BeanDefinition 實例,該實例負責保存bean對象的所有必要信息,包括 bean 對象的 class 類型、是否是抽象類、構造方法和參數、其它屬性等等。當客戶端向容器請求相應對象時,容器就會通過這些信息為客戶端返回一個完整可用的 bean 實例。微信搜索 web_resource 關注后獲取更多干貨!

原材料已經準備好(把 BeanDefinition 看著原料),開始做菜吧,等等,你還需要一份菜譜,BeanDefinitionRegistry和BeanFactory就是這份菜譜,BeanDefinitionRegistry 抽象出 bean 的注冊邏輯,而 BeanFactory 則抽象出了 bean 的管理邏輯,而各個 BeanFactory 的實現類就具體承擔了 bean 的注冊以及管理工作。它們之間的關系就如下圖:

Spring中IoC容器知識點有哪些

DefaultListableBeanFactory作為一個比較通用的 BeanFactory 實現,它同時也實現了 BeanDefinitionRegistry 接口,因此它就承擔了 Bean 的注冊管理工作。從圖中也可以看出,BeanFactory 接口中主要包含 getBean、containBean、getType、getAliases 等管理 bean 的方法,而 BeanDefinitionRegistry 接口則包含 registerBeanDefinition、removeBeanDefinition、getBeanDefinition 等注冊管理 BeanDefinition 的方法。

下面通過一段簡單的代碼來模擬 BeanFactory 底層是如何工作的:

// 默認容器實現
DefaultListableBeanFactory beanRegistry = new DefaultListableBeanFactory();
// 根據業務對象構造相應的BeanDefinition
AbstractBeanDefinition definition = new RootBeanDefinition(Business.class,true);
// 將bean定義注冊到容器中
beanRegistry.registerBeanDefinition("beanName",definition);
// 如果有多個bean,還可以指定各個bean之間的依賴關系
// ........




// 然后可以從容器中獲取這個bean的實例
// 注意:這里的beanRegistry其實實現了BeanFactory接口,所以可以強轉,
// 單純的BeanDefinitionRegistry是無法強制轉換到BeanFactory類型的
BeanFactory container = (BeanFactory)beanRegistry;
Business business = (Business)container.getBean("beanName");

這段代碼僅為了說明 BeanFactory 底層的大致工作流程,實際情況會更加復雜,比如 bean 之間的依賴關系可能定義在外部配置文件(XML/Properties)中、也可能是注解方式。Spring IoC 容器的整個工作流程大致可以分為兩個階段

以上是“Spring中IoC容器知識點有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

商洛市| 阳新县| 将乐县| 汾阳市| 长顺县| 元氏县| 林甸县| 泉州市| 南开区| 南江县| 冷水江市| 阜阳市| 富裕县| 汉沽区| 呈贡县| 黎川县| 邳州市| 大理市| 延寿县| 仪陇县| 东乡族自治县| 凭祥市| 新晃| 大兴区| 垫江县| 安泽县| 辉县市| 筠连县| 天柱县| 彰化市| 巴楚县| 五家渠市| 镇巴县| 深圳市| 扶绥县| 冷水江市| 兴业县| 文登市| 芮城县| 晋宁县| 宜春市|