亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

詳解Spring Bean 之間的特殊關系

2024-07-14 08:40:38
字體:
來源:轉載
供稿:網友

 在 Spring 容器中,兩個 Bean 之間除了通過 <ref> 建立依賴關系外,還存在著一些特殊關系。

1 繼承

在面向對象的編程原理中,當多個類擁有相同的方法和屬性時,則可以引入父類用于消除重復的代碼 。 而在 Spring 容器中,如果多個 Bean 存在相同的配置信息,我們可以定義一個父 Bean ,這樣子 Bean 將會自動繼承父 Bean 的配置信息 。

<!-- 父 Bean--><bean id="abstractBook" class="net.deniro.spring4.bean.Book"   p:name="面紗" abstract="true"></bean><!-- 子 Bean--><bean id="book1" class="net.deniro.spring4.bean.Book"   p:press="重慶出版社" parent="abstractBook"/><bean id="book2" class="net.deniro.spring4.bean.Book"   p:press="上海譯文出版社" parent="abstractBook"/>

一般情況下,父 Bean 的功能是簡化子 Bean 的配置,所以設置為抽象類(abstract="true");如果這里沒有把父 Bean 設置為抽象類,那么 Spring 容器會實例化父 Bean 。

2 前置依賴

一般情況下,使用 <ref> 來建立 Bean 之間的依賴關系, Spring 容器負責管理這些關系,當實例化一個 Bean 時,容器保證該 Bean 所依賴的 Bean 都已經完成了初始化工作。

但在某些情況下,Bean 之間的依賴關系并沒有那么明顯。

假設這樣一種場景,某系統設置了一些系統參數(如密碼有效期、是否開啟監控等),這些啟動參數用來控制系統的運行邏輯,我們使用一個 Setting 類來表示這些參數:

public class Settings {  /**   * 密碼過期時間(單位:天)   */  public static int PASS_TIMEOUT = 30;  /**   * 是否開啟監控   */  public static boolean IS_MONITOR = false;}

在此,我們為這些參數設置了默認值。系統還有一個管理后臺,管理員可以通過這個后臺調整這些系統參數并保存到數據庫中。所以應用啟動時,需要從數據庫中加載這些系統參數:

public class System {  public System() {    init();  }  /**   * 初始化   */  private void init() {    //假設這些值來源于數據庫    Settings.PASS_TIMEOUT = 20;    Settings.IS_MONITOR = true;  }}

系統有一個密碼過期管理器,它會根據系統參數中的【密碼過期的天數】,來創建檢測密碼是否過期的定時任務:

public class PassManager {  int timeout;  public PassManager() {    timeout = Settings.PASS_TIMEOUT;    timerTask();  }  /**   * 檢測密碼是否過期的定時任務   */  private void timerTask() {  }  public int getTimeout() {    return timeout;  }}

雖然 PassManager 并沒有直接依賴于 Settings,但從邏輯上來看,PassManager 希望 System 加載初始化系統參數后再啟動。

Spring 中可以通過 depends-on 屬性顯式地指定 Bean 的前置依賴 Bean, 保證這個 Bean 在實例化之前,它的前置依賴 Bean 已經加載完畢。

<bean id="system" class="net.deniro.spring4.bean.System"/><bean id="manager" class="net.deniro.spring4.bean.PassManager"   depends-on="system"/>

如果前置依賴于多個 Bean ,那么可以通過逗號、空格或分號的方式來配置 Bean 名稱 。

3 引用 ID

假設一個 Bean 需要引用另一個 Bean 的 id 值(beanName),這一般用于在運行期間在 Bean 中通過 getBean(beanName) 方法獲取另一個 Bean 的情境。

可以這樣配置:

<bean id="author" class="net.deniro.spring4.bean.Author"/><bean id="book" class="net.deniro.spring4.bean.Book"   p:authorId="author"/>

Book 中新增 authorId 屬性:

/** * author Bean 的 ID */private String authorId;

雖然可以以這種字面值的形式進行設置,但兩者之間并沒有建立真正的引用關系。所以只有等到具體調用時才會發現配置錯誤。

Spring 提供了 <idref> 元素標簽,通過 <idref> 引用另一個 Bean 的名稱,這樣在容器啟動時,就會檢查引用關系的正確性,可以提前發現錯誤的配置信息。

<bean id="author10" class="net.deniro.spring4.bean.Author"/><bean id="book10" class="net.deniro.spring4.bean.Book"    >  <property name="authorId">    <idref bean="author10"/>  </property></bean>

如果配置發生錯誤,Spring 容器啟動時就會拋出 BeanDefinitionStoreException,而且 IDE 的XML 分析器也會提前發現引用錯誤,所以推薦使用 <idref> 元素標簽的方式來引用 ID。

 總結

以上所述是小編給大家介紹的Spring Bean 之間的特殊關系,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲影影院av| 亚洲成人1234| 一区二区三区黄色| 欧美精品久久久久久久免费观看| 亚洲精品av在线| 国产精品草莓在线免费观看| 亚洲最大的成人网| 国产精品直播网红| 国产欧美日韩专区发布| 欧美激情一区二区三区成人| 91国产美女在线观看| 综合激情国产一区| 久久久国产一区二区三区| 亚洲欧美激情另类校园| 日韩av资源在线播放| 亚洲国产美女久久久久| 亚洲人高潮女人毛茸茸| 狠狠躁夜夜躁人人躁婷婷91| 日本韩国欧美精品大片卡二| 亚洲女人天堂色在线7777| 欧美疯狂性受xxxxx另类| 91精品在线国产| 国产91精品在线播放| 亚洲精品99999| 亚洲xxx大片| 国产成人免费av电影| 综合国产在线观看| 午夜精品在线观看| 久久99青青精品免费观看| 91在线视频成人| 亚洲福利视频网| 国产原创欧美精品| 久久久久免费视频| 国产成人一区二区三区小说| 日韩电影在线观看永久视频免费网站| 亚洲精品久久久久中文字幕二区| 日韩高清电影好看的电视剧电影| 国产一区二区三区直播精品电影| 91理论片午午论夜理片久久| 欧美另类精品xxxx孕妇| 91成人天堂久久成人| 黄色一区二区三区| 亚洲色图50p| 国产欧美在线观看| 日韩欧美精品中文字幕| 国产一区二区在线免费| 久久久999精品| 日韩av电影在线播放| 欧美亚洲国产视频小说| 久久天天躁日日躁| 欧美激情一区二区三区在线视频观看| 欧美激情在线视频二区| 国产精品偷伦免费视频观看的| 亚洲娇小xxxx欧美娇小| 国产欧美精品xxxx另类| 日韩av中文字幕在线播放| 国产精品18久久久久久首页狼| 国内伊人久久久久久网站视频| 日韩欧美极品在线观看| 91精品久久久久久久久不口人| 色偷偷偷亚洲综合网另类| 欧美激情在线狂野欧美精品| 国产精品久久久久久久久粉嫩av| 亚洲欧美国产精品专区久久| 国产国语刺激对白av不卡| 国产一区红桃视频| 亚洲精选一区二区| 国产欧美日韩视频| 国产欧美一区二区白浆黑人| 国产亚洲精品久久久久久777| www.久久撸.com| 国产精品爽黄69天堂a| 亚洲黄色在线看| 日本人成精品视频在线| 91国产精品91| 91麻豆桃色免费看| 久久久久久久久电影| 亚洲一区二区三区sesese| 久久精品99无色码中文字幕| 国产精品免费久久久久影院| 久久全球大尺度高清视频| 欧美激情视频在线观看| 国产视频丨精品|在线观看| 高清日韩电视剧大全免费播放在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 欧美专区第一页| 国产亚洲一区二区在线| 久久99精品久久久久久琪琪| 欧美日韩高清区| 狠狠躁天天躁日日躁欧美| 久久久久久久国产| 久久久免费观看| 91丝袜美腿美女视频网站| 国产精品日韩欧美大师| 欧美激情一区二区三区久久久| 久久人人爽国产| 91性高湖久久久久久久久_久久99| 色老头一区二区三区在线观看| 国产91精品黑色丝袜高跟鞋| 日韩欧美在线视频免费观看| 黄色成人av在线| 欧美电影《睫毛膏》| 高清日韩电视剧大全免费播放在线观看| 久久在线视频在线| 国产成人黄色av| 亚洲区bt下载| 亚洲精品国产精品乱码不99按摩| 日韩精品极品在线观看| 琪琪第一精品导航| 日韩大片在线观看视频| 亚洲国产美女精品久久久久∴| 亚洲天堂成人在线视频| 欧美高跟鞋交xxxxxhd| 日韩免费在线观看视频| 97精品久久久| 日韩免费黄色av| 91社影院在线观看| 88xx成人精品| 久久99国产精品久久久久久久久| 午夜精品免费视频| 亚洲风情亚aⅴ在线发布| 国产va免费精品高清在线| 国产成人在线一区二区| 日本国产欧美一区二区三区| 中文字幕亚洲第一| 狠狠干狠狠久久| 欧美做爰性生交视频| 国产精品爽黄69天堂a| 亚洲精品自拍偷拍| 亚洲欧美第一页| 在线观看视频亚洲| 亚洲欧美精品在线| 色偷偷噜噜噜亚洲男人| 久久久久久久久久久免费精品| 欧美性生交xxxxx久久久| 中文字幕久久久| 久久综合亚洲社区| 亚洲国产婷婷香蕉久久久久久| 亚洲成人激情在线观看| 亚洲人成欧美中文字幕| 91中文字幕在线| 精品美女永久免费视频| 久久久久久久久久久久av| 欧美午夜性色大片在线观看| 亚洲国产精品999| 97精品久久久中文字幕免费| 一级做a爰片久久毛片美女图片| 亚洲无亚洲人成网站77777| 国产精品一区二区性色av| 精品国内产的精品视频在线观看| 欧美激情在线狂野欧美精品| 午夜精品久久久久久久99热| 亚洲成人三级在线| 久久久久久久久久国产| 久久国产精品视频| 国产自产女人91一区在线观看| 亚洲精品99久久久久中文字幕| 爽爽爽爽爽爽爽成人免费观看| 日本精品久久久久影院| 91国在线精品国内播放| 精品国产精品自拍| 中文字幕亚洲综合| 色无极影院亚洲| 亚洲国产精品久久|