91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

洛阳市| 新巴尔虎左旗| 阿拉善右旗| 淮南市| 桂林市| 内黄县| 阜平县| 长顺县| 新丰县| 稷山县| 西贡区| 恩平市| 当雄县| 日照市| 海口市| 固原市| 维西| 苍山县| 甘洛县| 庆阳市| 义乌市| 老河口市| 青河县| 土默特左旗| 元阳县| 大厂| 北辰区| 安平县| 萨迦县| 大化| 隆回县| 桐城市| 叶城县| 陆川县| 饶平县| 玉环县| 松桃| 济阳县| 河北省| 屯昌县| 敖汉旗|