Spring構造函數注入和參數名稱

在運行時,除非在啟用了調試選項的情況下編譯類,否則Java類不會保留構造函數或方法參數的名稱。

這對于Spring構造函數注入有一些有趣的含義。

考慮以下簡單的類

package dbg;
public class Person {private final String first;private final String last;private final Address address;public Person(String first, String last, Address address){this.first = first;this.last = last;this.address = address;}public String getFirst() {return first;}public String getLast() {return last;}public Address getAddress() {return address;}
}

和一個示例Spring bean配置xml文件:

<bean name='address1' class='dbg.Address' p:street1='street1' p:street2='street1' p:state='state1'/><bean name='person1' class='dbg.Person' c:address-ref='address1' c:last='Last1' c:first='First1'  ></bean><bean name='person2' class='dbg.Person' c:first='First2' c:address-ref='address1' c:last='Last2'   ></bean>

在這里,我使用c名稱空間進行構造函數注入。 失敗的原因是參數類型是模棱兩可的–這是因為第一個參數是String,并且由于其運行時表示中不存在參數名稱,因此Spring無法確定應該用名字還是姓氏代替它。 這種情況下有一些修復方法:1.要使用基于索引的構造函數注入,缺點是它非常冗長:

<bean name='person1' class='dbg.Person' ><constructor-arg value='First1'></constructor-arg><constructor-arg value='Last1'></constructor-arg><constructor-arg ref='address1'></constructor-arg></bean><bean name='person2' class='dbg.Person' ><constructor-arg value='First2'></constructor-arg><constructor-arg value='Last2'></constructor-arg><constructor-arg ref='address1'></constructor-arg></bean>

2.要使用調試符號進行編譯,可以通過向Java編譯器傳遞-g或-g:var標志來完成–這將確保參數名稱保留在類文件中,并使用c保留原始的簡潔bean配置。名稱空間將起作用。 3.巧妙的解決方法是使用@ConstructorProperties注釋構造函數,該結構基本上為Spring提供參數名稱:

public class Person {private final String first;private final String last;private final Address address;@ConstructorProperties({'first','last','address'})public Person(String first, String last, Address address){this.first = first;this.last = last;this.address = address;}

無論打開或關閉調試選項,此功能都可以使用。 4.可能最好的解決方法是簡單地使用@Configuration定義bean:

@Configuration
public static class TestConfiguration{@Beanpublic Address address1(){return new Address();}@Beanpublic Person person1(){return new Person('First1', 'Last1', address1());}@Beanpublic Person person2(){return new Person('First2', 'Last2', address1());}}


參考: all和其他博客中來自JCG合作伙伴 Biju Kunjummen的Spring構造器注入和參數名稱 。

翻譯自: https://www.javacodegeeks.com/2012/10/spring-constructor-injection-and-argument-names.html

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

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

相關文章

java學習文檔_資深程序員帶你深入了解JAVA知識點,實戰篇,PDF文檔

JAVA 集合JAVA 集合面對浩瀚的網絡學習資源&#xff0c;您是否為很難找到適合自己的學習資源而感到苦惱過&#xff1f;那么&#xff0c;您來對地方了。在這里我們幫助大家整理了一份適于輕松學習 Java 文章的清單。JVM文字太多&#xff0c;不便之處敬請諒解JAVA 集合文字太多&a…

java程序員電影_Java程序員必看電影:Java 4-ever

(Scene: A father and his son playing "throw-and-catch")(場景: 一位父親和兒子玩丟接球游戲)Narrator: They appear to be a perfect family旁白: 他們看起來像是一個完美的家庭(Scene: bedtime story)(場景: 床邊故事)Father: Export all OLE objects with the c…

深入理解softmax函數

Softmax回歸模型&#xff0c;該模型是logistic回歸模型在多分類問題上的推廣&#xff0c;在多分類問題中&#xff0c;類標簽 可以取兩個以上的值。Softmax模型可以用來給不同的對象分配概率。即使在之后&#xff0c;我們訓練更加精細的模型時&#xff0c;最后一步也需要用soft…

《第二章:深入了解超文本》

從本章開始要去除無用的話&#xff0c;只在筆記中記載要點----- 使用<a>元素創建一個超文本鏈接&#xff0c;鏈接到另一個Web頁面。 <a>元素的內容會成為Web頁面中可單擊的文本。 href屬性告訴瀏覽器鏈接的目標文件。 了解屬性 例&#xff1a;style的type屬性指定…

strcpy函數_錯誤更正(拷貝賦值函數的正確使用姿勢)

這是一篇對什么是C的The Rule of Three的錯誤更正和詳細說明。閱讀時間7分鐘。難度???雖然上一篇文章的閱讀量只有凄慘的兩位數&#xff0c;但是懷著對小伙伴負責的目的&#xff0c;必須保證代碼的正確性。這是大廚做技術自媒體的態度。前文最后一段代碼是這樣的&#xff1a…

將Java應用程序打包為一個(或胖)JAR

這篇文章的目標是一個有趣但非常強大的概念&#xff1a;將應用程序打包為單個可運行的JAR文件&#xff0c;也稱為一個或胖 JAR文件。 我們習慣了大型WAR歸檔文件&#xff0c;其中包含所有打包在某些公用文件夾結構下的依賴項。 使用類似于JAR的打包&#xff0c;情況有所不同&a…

學習java的第三天,猜字符的小程序

關于猜字符的小程序 主要實現&#xff1a;隨機輸出5個字母&#xff0c;用戶輸入猜測的字母&#xff0c;進行對比得出結果 主要有3個方法&#xff1a;主方法main(); 產生隨機字符的方法generate(); 比較用戶輸入的字符與隨機產生的字符的方法check&#xff08;&#xff09;&…

《Linux命令行與shell腳本編程大全 第3版》創建實用的腳本---10

以下為閱讀《Linux命令行與shell腳本編程大全 第3版》的讀書筆記&#xff0c;為了方便記錄&#xff0c;特地與書的內容保持同步&#xff0c;特意做成一節一次隨筆&#xff0c;特記錄如下&#xff1a;轉載于:https://www.cnblogs.com/guochaoxxl/p/7894995.html

python安裝包找不到setup_如何安裝沒有setup.py的Python模塊?

在系統上開始使用該代碼的最簡單的方法是&#xff1a;>將文件放入機器上的目錄中,>將該目錄的路徑添加到您的PYTHONPATH步驟2可以從Python REPL完成如下&#xff1a;import syssys.path.append("/home/username/google_search")您的文件系統的外觀示例&#xf…

Spring Batch中面向TaskletStep的處理

許多企業應用程序需要批處理才能每天處理數十億筆交易。 必須處理這些大事務集&#xff0c;而不會出現性能問題。 Spring Batch是一個輕量級且強大的批處理框架&#xff0c;用于處理這些大數據集。 Spring Batch提供了“面向TaskletStep”和“面向塊”的處理風格。 在本文中&a…

布局中常見的居中問題

說到布局除了浮動以及定位外還有一個不得不提的點&#xff0c;那就是居中&#xff0c;居中問題我們在網頁布局當中經常遇到&#xff0c;那么以下就是分為兩部分來講&#xff0c;一部分是傳統的居中&#xff0c;另一種則是flex居中&#xff0c;每個部分又通過分為水平垂直居中來…

unity json解析IPA后續

以前說到的&#xff0c;有很大的限制&#xff0c;只能解析簡單的類&#xff0c;如果復雜的就會有問題&#xff0c;從老外哪里看到一片博客&#xff0c;是將類中的list 等復雜對象序列化&#xff0c; using UnityEngine; using System.Collections; using System.Collections.…

改善代碼質量之內連臨時變量

待增轉載于:https://www.cnblogs.com/muyl/articles/6940896.html

python 矩陣元素相加_Numpy中元素級運算

標量與矩陣的運算:加法&#xff1a;values [1,2,3,4,5]values np.array(values) 5#現在 values 是包含 [6,7,8,9,10] 的一個 ndarray乘法&#xff1a;x np.multiply(some_array, 5)x some_array * 5矩陣與矩陣的運算:加法&#xff1a;對應元素相加&#xff0c;但形狀必須相…

排序算法——桶排序

把數據放進若干個桶&#xff0c;然后在桶里用其他排序&#xff0c;近乎分治思想。從數值的低位到高位依次排序&#xff0c;有幾位就排序幾次。例如二位數就排兩次&#xff0c;三位數就排三次&#xff0c;依次按照個十百...的順序來排序。 第一次排序&#xff1a;50 12 …

原型設計模式:創建另一個小車

創建對象確實是一個耗時的過程&#xff0c;也是一件昂貴的事情。 因此&#xff0c;我們現在正努力節省時間和金錢。 我們該怎么做&#xff1f; 克隆奇跡多莉 有人記得多莉嗎&#xff1f; 是的&#xff0c;是綿羊&#xff0c;是第一個被克隆的哺乳動物。 好吧&#xff0c;我不想…

java實現周期任務_java定時任務的實現方式

本文列舉常見的java定時任務實現方式&#xff0c;并做一定比較。1. 循環內部sleep實現周期執行創建一個thread&#xff0c;run() while循環里sleep()來實現周期性執行; 簡單粗暴&#xff0c;作為一個初學者很容易想到。public class Task1 {public static void main(String[] a…

磁盤鏡像工具Guymager

磁盤鏡像工具Guymager在數字取證中&#xff0c;經常需要對磁盤制作鏡像&#xff0c;以便于后期分析。Kali Linux提供一款輕量級的磁盤鏡像工具Guymager。該工具采用圖形界面化方式&#xff0c;提供磁盤鏡像和磁盤克隆功能。它不僅生成dd的鏡像&#xff0c;還能生成EWF和AFF鏡像…

python怎么寫代碼求年華收益率_如何計算年化收益率?

關于投資年化收益率的計算&#xff0c;三思君覺得主要有三種&#xff0c;分別是一次性投資的收益率計算、定期定額的收益率計算、不定期不定額的收益率計算。1.一次性投資的收益率計算對于一次性投資的收益率&#xff0c;相信大家都會計算。比如&#xff0c;小李同學去年買了一…

HTTPS協議在Tomcat中啟用的配置

本文將講解HTTPS協議在Tomcat中啟用是如何配置的。 概念簡介 Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器&#xff0c;屬于輕量級應用服務器&#xff0c;在中小型系統和并發訪問用戶不是很多的場合下被普遍使用&#xff0c;是開發和調試 JSP 程序的首選。 HTTP 超文本…