日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

关于Spring中IOC容器和AOP协同工作的原理理解

發布時間:2024/1/17 javascript 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于Spring中IOC容器和AOP协同工作的原理理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、在詳細介紹 IOC 容器的工作原理前,這里先介紹一下實現 IOC 所用到的一些輔助類,包括BeanDefinition、BeanReference、PropertyValues、PropertyValue。按照順序先從 BeanDefinition 開始介紹。BeanDefinition從字面意思上翻譯成中文就是 “Bean 的定義”。從翻譯結果中就可以猜出這個類的用途,即根據 Bean 配置信息生成相應的 Bean 詳情對象。

圖2 根據 bean 配置生成 BeanDefinition

看完上圖就對 BeanDefinition 的用途有了更進一步的認識。接下來我們來說說上圖中的 ref 對應的 BeanReference 對象。BeanReference 對象保存的是 bean 配置中 ref 屬性對應的值,在后續 BeanFactory 實例化 bean 時,會根據 BeanReference 保存的值去實例化 bean 所依賴的其他 bean。接下來說說 PropertyValues 和 PropertyValue 這兩個長的比較像的類,首先是PropertyValue。PropertyValue 中有兩個字段 name 和 value,用于記錄 bean 配置中的標簽的屬性值。然后是PropertyValues,PropertyValues 從字面意思上來看,是 PropertyValue 復數形式,在功能上等同于 List。那么為什么 Spring 不直接使用 List,而自己定義一個新類呢?答案是要獲得一定的控制權,看下面的代碼:

public class PropertyValues {private final List<PropertyValue> propertyValueList = new ArrayList<PropertyValue>();public void addPropertyValue(PropertyValue pv) {// 在這里可以對參數值 pv 做一些處理,如果直接使用 List,則就不行了this.propertyValueList.add(pv);}public List<PropertyValue> getPropertyValues() {return this.propertyValueList;}}

XML的解析過程:

BeanFactory 初始化時,會根據傳入的 xml 配置文件路徑加載并解析配置文件。但是加載和解析 xml 配置文件這種臟活累活,BeanFactory 可不太愿意干,它只想高冷的管理容器中的 bean。于是 BeanFactory 將加載和解析配置文件的任務委托給專職人員 BeanDefinitionReader 的實現類 XmlBeanDefinitionReader 去做。那么 XmlBeanDefinitionReader 具體是怎么做的呢?
(1)將 xml 配置文件加載到內存中
(2)獲取根標簽下所有的標簽
(3)遍歷獲取到的標簽列表,并從標簽中讀取 id,class 屬性
(4)創建 BeanDefinition 對象,并將剛剛讀取到的 id,class 屬性值保存到對象中
(5)遍歷標簽下的標簽,從中讀取屬性值,并保持在 BeanDefinition 對象中
(6)將 <id, BeanDefinition> 鍵值對緩存在 Map 中,留作后用
(7)重復3、4、5、6步,直至解析結束

注冊 BeanPostProcessor:
  BeanPostProcessor 接口是 Spring 對外拓展的接口之一,其主要用途提供一個機會,讓開發人員能夠插手 bean 的實例化過程。通過實現這個接口,我們就可在 bean 實例化時,對bean 進行一些處理。比如,我們所熟悉的 AOP 就是在這里將切面邏輯織入相關 bean 中的。正是因為有了 BeanPostProcessor 接口作為橋梁,才使得 AOP 可以和 IOC 容器產生聯系。
  XmlBeanDefinitionReader 在完成解析工作后,BeanFactory 會將它解析得到的 <id, BeanDefinition> 鍵值對注冊到自己的 beanDefinitionMap 中。BeanFactory 注冊好 BeanDefinition 后,就立即開始注冊 BeanPostProcessor 相關實現類。這個過程比較簡單:
(1)根據 BeanDefinition 記錄的信息,尋找所有實現了 BeanPostProcessor 接口的類。
(2)實例化 BeanPostProcessor 接口的實現類
(3)將實例化好的對象放入 List中
(4)重復2、3步,直至所有的實現類完成注冊

getBean 過程解析

  在完成了 xml 的解析、BeanDefinition 的注冊以及 BeanPostProcessor 的注冊過程后。BeanFactory 初始化的工作算是結束了,此時 BeanFactory 處于就緒狀態,等待外部程序的調用。
  外部程序一般都是通過調用 BeanFactory 的 getBean(String name) 方法來獲取容器中的 bean。BeanFactory 具有延遲實例化 bean 的特性,也就是等外部程序需要的時候,才實例化相關的 bean。這樣做的好處是比較顯而易見的,第一是提高了 BeanFactory 的初始化速度,第二是節省了內存資源。下面我們就來詳細說說 bean 的實例化過程:

Spring? Bean的實例化過程:

BeanFactory 的生命流程:

(1)BeanFactory 加載 Bean 配置文件,將讀到的 Bean 配置封裝成 BeanDefinition 對象
(2)將封裝好的 BeanDefinition 對象注冊到 BeanDefinition 容器中
(3)注冊 BeanPostProcessor 相關實現類到 BeanPostProcessor 容器中
(4)BeanFactory 進入就緒狀態
(5)外部調用 BeanFactory 的 getBean(String name) 方法,BeanFactory 著手實例化相應的 bean
(6)重復步驟 3 和 4,直至程序退出,BeanFactory 被銷毀

轉載于:https://www.cnblogs.com/BaoZiY/p/11376108.html

總結

以上是生活随笔為你收集整理的关于Spring中IOC容器和AOP协同工作的原理理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av网站国产 | 黄色av大片 | 日韩欧美一级大片 | 少妇熟女一区二区 | 成人激情视频在线观看 | 黄色av网站网址 | 国产做爰xxxⅹ高潮视频12p | 操处女逼视频 | 欧美老肥熟 | 黄色国产在线观看 | 久久国产精彩视频 | 性盈盈影院中文字幕 | 免费成人激情视频 | av色综合 | 男女ss视频 | 国产孕交 | 亚洲人成777 | 爱视频福利网 | 99精品在线观看 | 黄色片网站在线 | 国产一区 在线播放 | 午夜寂寞福利 | 精品97人妻无码中文永久在线 | 成年人免费在线观看网站 | 一二区视频 | 99久久精品免费视频 | 午夜寂寞剧场 | 日韩不卡免费 | 黄色高清免费 | a级性生活视频 | 玖玖热在线视频 | 豆花免费跳转入口官网 | 狠狠狠狠干| 成人午夜影片 | 久久大陆 | 一区二区在线免费观看视频 | 国产精品36p| 色四虎| 国产清纯白嫩初高中在线观看性色 | 亚洲色图清纯唯美 | 日本免费在线视频 | 99热这里只有精品久久 | 在线看免费毛片 | 性色av一区二区三区免费 | 小早川怜子一区二区三区 | 日本韩国毛片 | 成人在线电影网站 | 好吊妞视频这里只有精品 | 国产精品久久久久久久一区二区 | 99re在线视频 | 女人的黄色片 | 免费观看成人毛片 | 99久久国 | 久久99精品久久久久久琪琪 | 欧美人与动性xxxxx杂性 | 在线香蕉视频 | 巨茎大战刘亦菲 | 国产特级黄色录像 | 黄色一级大片 | 国产亚洲区 | 亚洲一区二区三区高清视频 | 国产大片黄 | 国内精品久久久久久久久久 | 日本精品99 | 长篇乱肉合集乱500小说日本 | 日本一区二区在线视频 | av日韩精品 | 最新国产露脸在线观看 | 精品蜜桃一区二区三区 | 亚洲aa在线 | 国产尤物视频 | 国产精品一页 | 草草影院在线观看视频 | 成人性视频免费网站 | 成人一区三区 | 成人无码www在线看免费 | 在线精品一区二区 | 五月天婷婷综合 | 一区二区免费看 | 日韩在线免费播放 | 麻豆av一区二区三区在线观看 | 欧美黄网站 | 在线观看视频色 | 中文字幕一区二区三区门四区五区 | 欧美成视频 | 三级大片在线观看 | 国产成人 综合 亚洲 | 久射网| 国产无遮挡18禁无码网站不卡 | 亚洲天堂2018av| 九九99精品视频 | 美女精品| 青青草97 | 日韩在线中文 | 999视频 | 婷婷激情四射 | 国产探花在线观看 | 又污又黄又爽的网站 | 欧美 日韩 国产一区 |