【Spring】18 Bean 定義繼承

文章目錄

      • 介紹
      • 聲明式配置
      • 抽象Bean定義
      • 繼承的配置項
      • 注意:抽象Bean預實例化
      • 結論

Spring 框架提供了一個強大的功能,稱為 Bean 定義繼承, 允許開發人員高效地在 bean 之間重用和自定義配置。在本篇文章中我們將介紹 Bean 定義繼承的概念,探討它如何增強 Spring 應用程序的可維護性和可讀性。

介紹

Spring 中的 Bean 定義封裝了 bean 的配置信息,包括構造函數參數、屬性值和容器特定的細節。通過 Bean 定義繼承,子 bean 定義可以從父定義中繼承配置數據,提供了一種方便的方式來應用模板并避免冗余配置。

聲明式配置

當使用基于 XML 的配置元數據時,我們可以通過使用 parent 屬性來指示子 bean 定義。以下是一個例子:

<bean id="inheritedTestBean" abstract="true" class="org.springframework.beans.TestBean"><property name="name" value="parent"/><property name="age" value="1"/>
</bean><bean id="inheritsWithDifferentClass" class="org.springframework.beans.DerivedTestBean"parent="inheritedTestBean" init-method="initialize">  <property name="name" value="override"/><!-- 年齡屬性值將從父級繼承 -->
</bean>

在這個例子中,inheritsWithDifferentClass 是一個從 inheritedTestBean 繼承的子 bean。子 bean 可以覆蓋或添加新的屬性值,同時從父 bean 繼承其他屬性。

抽象Bean定義

當子 bean 定義僅用作模板時,通常將其標記為抽象。abstract="true" 屬性表示父 bean 是不完整的,應該作為子定義的模板。

<bean id="inheritedTestBeanWithoutClass" abstract="true"><property name="name" value="parent"/><property name="age" value="1"/>
</bean><bean id="inheritsWithClass" class="org.springframework.beans.DerivedTestBean"parent="inheritedTestBeanWithoutClass" init-method="initialize"><property name="name" value="override"/><!-- 年齡屬性值將從父級bean定義繼承 -->
</bean>

在這種情況下,嘗試直接實例化抽象父 bean 將導致錯誤,強制其僅用作模板。

繼承的配置項

子 bean 定義從父級繼承各種配置,包括作用域、構造函數參數、屬性值和方法覆蓋。子定義中的特定設置,如作用域或初始化方法,將覆蓋相應的父設置。

注意:抽象Bean預實例化

當使用 ApplicationContext 時,默認情況下它會預先實例化所有單例。對于僅用作模板的抽象 bean,確保設置abstract="true" 以防止意外實例化。否則可能導致意外行為。

結論

總之,Spring 的 Bean 定義繼承是一個有價值的工具,有助于促進代碼重用,減少冗余,并提高應用程序的整體可維護性。通過有效應用父子關系,開發人員可以創建更模塊化和有組織的配置結構。了解抽象 bean 和聲明性配置的細微差別對于在 Spring 框架中充分利用此功能至關重要。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/710619.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/710619.shtml
英文地址,請注明出處:http://en.pswp.cn/news/710619.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JVM性能優化

運行時優化 方法內聯 方法內聯&#xff0c;是指 JVM在運行時將調用次數達到一定閾值的方法調用替換為方法體本身 &#xff0c;從而消除調用成本&#xff0c;并為接下來進一步的代碼性能優化提供基礎&#xff0c;是JVM的一個重要優化手段之一。 注&#xff1a; C的inline屬于編…

babylonsjs入門-基礎模版

基于babylonjs封裝的一些功能和插件 &#xff0c;希望有更多的小伙伴一起玩babylonjs&#xff1b; 歡迎加群&#xff08;點擊群號傳送&#xff09;&#xff1a;464146715 官方文檔 中文文檔 案例傳送門 ? 懶得打字&#xff0c;你們直接去copy組件吧&#xff0c;主要看這2…

舊版android模擬器,37歲程序員被裁

前言 從18年畢業至今&#xff0c;就職過兩家公司&#xff0c;大大小小項目做了幾個&#xff0c;非常感謝我的兩位老大&#xff0c;在我的android成長路上給予我很多指導&#xff0c;亦師亦友的關系。 從年前至今參加面試了很多公司&#xff0c;也收到了幾家巨頭的offer&#…

transformer--編碼器2(前饋全連接層、規范化層、子層鏈接結構、編碼器層、編碼器)

前饋全連接層 什么是前饋全連接層: 在Transformer中前饋全連接層就是具有兩層線性層的全連接網絡 前饋全連接層的作用: 考慮注意力機制可能對復雜過程的擬合程度不夠,通過增加兩層網絡來增強模型的能力 code # 前饋全連接層 class PositionwiseFeedForward(nn.Module):de…

絕地求生:發現吃雞號被盜,怎么操作才是最正確的

首先閑游盒先了解一下盜號者的盜號流程 一般盜號的流程是先把你steam上的皮膚飾品出售&#xff0c;然后把余額轉走&#xff0c;再把steam賬號作為黑號進行出售。 所以當閑游盒發現號被盜的時候也分為兩種情況&#xff1a;一種是他正在出售商品的時候&#xff0c;你收到郵箱提示…

Linux命令行與shell腳本編程大全-3-4

第三部分高級shell腳本編程 第17章創建函數 17.1 腳本函數基礎 17.1.1 創建函數 在bash shell 腳本中創建函數的語法有兩種。第一種語法是使用關鍵字function&#xff0c;隨后跟 上分配給該代碼塊的函數名&#xff1a; function name { commands } 17.1.2 使用函數 要在腳…

代碼隨想錄算法訓練營Day46 | 139.單詞拆分、多重背包(卡碼網56.攜帶礦石資源)

139.單詞拆分 可以理解為一道 完全背包 排列 的題&#xff0c;dp數組定義和遞推公式部分腦子需要轉個彎 1、DP數組定義&#xff1a;一維滾動數組vector<bool>。dp[j]表示字符串s的[0, j]子串是否能夠匹配。 2、DP數組初始化&#xff1a;dp[0]初始化為true&#xff0c;其…

Multi-Head Attention詳解

文中大部分內容以及圖片來自&#xff1a;https://medium.com/hunter-j-phillips/multi-head-attention-7924371d477a 當使用 multi-head attention 時&#xff0c;通常d_key d_value &#xff08;d_model / n_heads&#xff09;&#xff0c;其中n_heads是頭的數量。研究人員稱…

01-Vue2 介紹與指令的使用

1. Vue核心 1.1. Vue簡介 1.1.1. 官網 中文官網Vue.js - 漸進式 JavaScript 框架 | Vue.js (vuejs.org)https://cn.vuejs.org/ 英文官網Vue.js - The Progressive JavaScript Framework | Vue.js (vuejs.org)https://vuejs.org/ 1.1.2. 介紹與描述 VUE是構建于用戶界面的漸進…

靶機滲透之sar

Name: Sar: 1Date release: 15 Feb 2020Author: LoveSeries: Sar Download: https://drive.google.com/open?id1AFAmM21AwiAEiVFUA0cSr_GeAYaxd3lQ 對于vulnhub中的靶機&#xff0c;我們都需先下載鏡像&#xff0c;然后導入VM&#xff0c;并將網絡連接改為NAT模式。首先我們…

UDP數據報套接字編程入門

目錄 1.TCP和UDP的特點及區別 1.1TCP的特點 1.2UDP的特點 1.3區別 2.UDP Socket的api的介紹 2.1DatagramSocket API 2.2DatagramPacket API 3.回顯客戶端與服務器 3.1回顯服務器 3.1.1UdpEchoServer類的創建 3.1.2服務器的運行方法start() 3.1.3main部分 3.1.4.完整…

C# CAD PaletteSet.Style各種外觀和行為樣式

ps.Style 是 Autodesk.AutoCAD.Windows.PaletteSet 類的一個屬性&#xff0c;用于定義調色板集&#xff08;PaletteSet&#xff09;的各種外觀和行為樣式。它可以是 PaletteSetStyles 枚舉類型的組合值 PaletteSetStyles 枚舉中包含以下一些選項&#xff1a; NameEditable&am…

統計子矩陣

一、題目描述 P8783 [藍橋杯 2022 省 B] 統計子矩陣 二、算法簡析 2.1 二維前綴和 我們知道&#xff0c;只要確定了矩陣的左上頂點和右下頂點&#xff0c;一個矩陣就被固定了。因此&#xff0c;我們可以遍歷這兩個頂點&#xff0c;達到遍歷所有子矩陣的目的&#xff0c;復雜…

AutoSAR(基礎入門篇)12.5-Dem

目錄 一、Dem簡介 二、Dem消抖 1、計數模式 1. 普通增減計數 2. 反向歸零增減模式

在微服務整合dubbo,以為微服務版的若依為例

在微服務整合dubbo&#xff0c;以為微服務版的若依為例 一、環境二、整合過程1、父模塊依賴2、生產者3、消費者 三、修改若依的服務調用方式為dubbo1、改造系統模塊2、改造認證授權中心 四、整合過程遇到的問題1、出現循環引用2、出現依賴沖突3、啟動出現端口號被占用4、出現某…

UVa11726 Crime Scene

題目鏈接 UVa11726 - Crime Scene 題意 給定n&#xff08;n≤100&#xff09;個物體&#xff0c;每個物體都是一個圓或者k&#xff08;k≤10&#xff09;邊形&#xff0c;用長度盡量小的繩子把它們包圍起來。 分析 孟加拉國Manzurur Rahman Khan (Sidky)大神出的難題&#xff…

MySQL 核心模塊揭秘 | 07 期 | 二階段提交 (1) prepare 階段

二階段提交的 prepare 階段&#xff0c;binlog 和 InnoDB 各自會有哪些動作&#xff1f; 本文基于 MySQL 8.0.32 源碼&#xff0c;存儲引擎為 InnoDB。 1. 二階段提交 二階段提交&#xff0c;顧名思義&#xff0c;包含兩個階段&#xff0c;它們是&#xff1a; prepare 階段。…

springboot-基礎-eclipse配置+helloword示例

備份筆記。所有代碼都是2019年測試通過的&#xff0c;如有問題請自行搜索解決&#xff01; 下一篇&#xff1a;springboot-基礎-添加model和controller的簡單例子常用注解含義 目錄 配置helloword示例新建項目創建文件 配置 spring boot官方有定制版eclipse&#xff0c;也就是…

BUUCTF AWD-Test1

打開靶場是這個有些簡陋的界面。 隨便點點&#xff0c;找到這個東西。 看到ThinkPHP&#xff0c;思路瞬間清晰&#xff0c;老熟人了。這個就是ThinkPHP漏洞。根據版本我們去找一下poc。 /index.php/?sIndex/\think\View/display&content%22%3C?%3E%3C?php%20phpinfo();…

SHELL 腳本: 導出NEO4j DUMP并上傳SFTP

前提 開通sftp賬號 安裝expect 示例 NEO4J_HOME/path/to/neo4j # neo4j 安裝目錄 DUMP_PATH/data/dump # DUMP本地保存目錄 DUMP_FILEneo4j_$(date %F).dump #導出文件名稱 UPLOAD_DIR/path/to/stfp/dump/ #上傳目錄 $NEO4J_HOME/bin/neo4j-admin dump --databaseneo4j --t…