自定義BeanNameGenerator生成規則

通過點進ComponentScan注解進入源碼可以看到

在這里插入圖片描述

追隨BeanNameGenerator進入源碼可以看到該類是個借口且只有一個方法

在這里插入圖片描述

點擊上面黑色箭頭出現兩個實現方法在這里插入圖片描述

點擊第一個方法

在這里插入圖片描述

進入determineBeanNameFromAnnotation方法中在這里插入圖片描述

通過上訴自定義一個生成beanName方法

  • 先創建一個CustomeBeanNameGenerator類
  • 實現BeanNameGenerator接口
  • 重寫generateBeanName方法
public class CustomeBeanNameGenerator implements BeanNameGenerator {@Overridepublic String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {//定義Bean的名稱String beanName = null;//1.判斷當前bean的定義信息是否是注解的if(definition instanceof AnnotatedBeanDefinition){//2.把definition轉成注解的bean定義信息AnnotatedBeanDefinition annotatedBeanDefinition = (AnnotatedBeanDefinition)definition;//2.獲取注解Bean定義的元信息AnnotationMetadata annotationMetadata = annotatedBeanDefinition.getMetadata();//3.獲取定義信息中的所有注解Set<String> types = annotationMetadata.getAnnotationTypes();//4.遍歷types集合for(String type : types){//5.得到注解的屬性AnnotationAttributes attributes = AnnotationAttributes.fromMap(annotationMetadata.getAnnotationAttributes(type, false));//6.判斷attributes是否為null,同時必須是@Component及其衍生注解if (attributes != null && isStereotypeWithNameValue(type, annotationMetadata.getMetaAnnotationTypes(type), attributes)) {//7.獲取value屬性的值Object value = attributes.get("value");//8.判斷value屬性是否為String類型if (value instanceof String) {String strVal = (String) value;//9.判斷value屬性是否有值if (StringUtils.hasLength(strVal)) {if (beanName != null && !strVal.equals(beanName)) {throw new IllegalStateException("Stereotype annotations suggest inconsistent " +"component names: '" + beanName + "' versus '" + strVal + "'");}beanName = strVal;}}}}}return beanName != null ? "my"+beanName : "my"+buildDefaultBeanName(definition);}private static final String COMPONENT_ANNOTATION_CLASSNAME = "org.springframework.stereotype.Component";private boolean isStereotypeWithNameValue(String annotationType,Set<String> metaAnnotationTypes, @Nullable Map<String, Object> attributes) {boolean isStereotype = annotationType.equals(COMPONENT_ANNOTATION_CLASSNAME) ||metaAnnotationTypes.contains(COMPONENT_ANNOTATION_CLASSNAME) ||annotationType.equals("javax.annotation.ManagedBean") ||annotationType.equals("javax.inject.Named");return (isStereotype && attributes != null && attributes.containsKey("value"));}private String buildDefaultBeanName(BeanDefinition definition) {String beanClassName = definition.getBeanClassName();Assert.state(beanClassName != null, "No bean class name set");String shortClassName = ClassUtils.getShortName(beanClassName);return Introspector.decapitalize(shortClassName);}
}

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

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

相關文章

使用結構體和類在Unity中管理IMU數據

使用結構體和類在Unity中管理IMU數據 IMU數據簡介使用結構體管理IMU數據結構體的優點結構體的使用場景 使用類管理IMU數據類的優點類的使用場景 結構體(struct) vs 類(class)為什么考慮使用結構體 結論 在Unity開發中&#xff0c;合理地選擇數據結構對于確保游戲和應用的性能和…

60 個 CSS 選擇器,一網打盡!

CSS 選擇器用于選擇 HTML 元素并將樣式應用于它們。使用這些選擇器&#xff0c;可以定義特定條件下應用哪些樣式。除了普通的選擇器外&#xff0c;還有偽類和偽元素&#xff0c;用于選擇具有特定狀態或特定部分的元素&#xff0c;并將樣式應用于它們。本文將通過圖文并茂的方式…

Windows11家庭版安裝Docker

文章目錄 安裝Docker安裝hyper-v繼續解決報錯完成效果圖進一步測試是否完成安裝 安裝Docker windows如何安裝docker 裝好之后&#xff0c;我打開報錯。 安裝hyper-v 按這個視頻操作&#xff1a;Windows 11 家庭版安裝 Hyper-V bat文件里的代碼是&#xff1a; pushd "…

【Educoder數據挖掘實訓】異常值檢測-3σ法

【Educoder數據挖掘實訓】異常值檢測-3σ法 開挖&#xff01; 這個異常值檢測基于的是兩點&#xff1a; 數據往往遵循正態分布在正態分布中&#xff0c; [ μ ? 3 σ , μ 3 σ ] [\mu - 3\sigma, \mu 3\sigma] [μ?3σ,μ3σ]包含了正態分布中 99.74 % 99.74\% 99.74%的數…

【投稿優惠|快速見刊】2024年圖像,機器學習和人工智能國際會議(ICIMLAI 2024)

【投稿優惠|快速見刊】2024年圖像&#xff0c;機器學習和人工智能國際會議&#xff08;ICIMLAI 2024&#xff09; 重要信息 會議官網&#xff1a;http://www.icimlai.com會議地址&#xff1a;深圳召開日期&#xff1a;2024.03.30截稿日期&#xff1a;2024.03.20 &#xff08;先…

2024全國水科技大會暨高氨氮廢水厭氧氨氧化處理技術論壇(四)

一、會議背景 為積極應對“十四五”期間我國生態環境治理面臨的挑戰&#xff0c;加快生態環境科技創新&#xff0c;構建綠色技術創新體系&#xff0c;全面落實科學技術部、生態環境部等部委編制的《“十四五”生態環境領域科技創新專項規劃》&#xff0c;積極落實省校合作&…

pip下載paddle、sklearn、cv2問題

ModuleNotFoundError: No module named ‘paddle‘ ModuleNotFoundError: No module named sklearn No matching distribution found for cv2 Could not build wheels for opencv-python, which is required to install pyproj

什么是BGP網絡 (邊界網關協議)

BGP&#xff08;邊界網關協議&#xff09;是一種用于在互聯網中交換路由信息的協議。作為網關或路由器之間的協議&#xff0c;BGP主要用于幫助確定數據包在網絡中的路徑。它通過在不同自治系統&#xff08;AS&#xff09;之間交換路徑信息&#xff0c;實現了全球互聯網網絡的連…

MySQL進階之(三)InnoDB數據存儲結構之數據頁結構

三、InnoDB數據存儲結構之數據頁結構 3.1 數據庫的存儲結構3.1.1 MySQL 數據存儲目錄3.1.2 頁的引入3.1.3 頁的概述3.1.4 頁的上層結構 3.2 數據頁結構3.2.1 文件頭和文件尾01、File Header&#xff08;文件頭部&#xff09;02、File Trailer&#xff08;文件尾部&#xff09; …

【JavaEE】_Spring Web MVC簡介

目錄 1. Spring Web MVC簡介 2. MVC簡介 3. Spring MVC 1. Spring Web MVC簡介 官網對于Spring Web MVC的介紹如下&#xff1a; 鏈接如下&#xff1a; https://docs.spring.io/spring-framework/reference/web/webmvc.html#https://docs.spring.io/spring-framework/refer…

將SU模型導入ARCGIS,并獲取高度信息,多面體轉SHP文件(ARCMAP)

問題:將Sketchup中導出的su模型,導入arcgis并得到面shp文件,進而獲取各建筑的高度、面積等信息。 思路: (1)導入arcgis得到多面體 (2)轉為面shp文件 (3)計算高度/面積等 1、【3D Analyst工具】【轉換】【由文件轉出】【導入3D文件】(在此步驟之間,建議先建立一個…

棧和隊列OJ題

文章目錄 一、雙隊列實現棧二、雙棧實現隊列 一、雙隊列實現棧 題目鏈接&#xff1a; https://leetcode.cn/problems/implement-stack-using-queues/description/ 題目分析&#xff1a; 棧的結構是后進先出&#xff0c;而隊列的結構是先進先出&#xff0c;我們利用這個性質&a…

AI Word Helper (Chorme Extentions) AI單詞助手(谷歌瀏覽器插件)

AI Word Helper (Chorme Extentions) AI單詞助手&#xff08;谷歌瀏覽器插件&#xff09; 英文網站&#xff0c;劃詞查單詞&#xff0c;還是看不懂&#xff1f;因為單詞意思那么多&#xff0c;詞性搞不清&#xff0c;上下文搞不清&#xff0c;出來的意思就沒法用&#xff0c;G…

一個基于輪詢的廣告系統

無論PC 客戶端還是手機客戶端&#xff0c;可能會遇到需要發布一些廣告&#xff0c;這些廣告可能是自己開發的&#xff0c;可能是三方的&#xff0c;而且希望是比較通用&#xff0c;能隨時發布&#xff0c;隨時就能看到效果。 本文提供了一種基于輪詢的廣告系統&#xff0c;主要…

【服務器數據恢復】昆騰存儲中raid5磁盤陣列數據恢復案例

服務器數據恢復環境&故障&#xff1a; 10個磁盤柜&#xff0c;每個磁盤柜配24塊硬盤。9個磁盤柜用于存儲數據&#xff0c;1個磁盤柜用于存儲元數據。 元數據存儲中24塊硬盤&#xff0c;組建了9組RAID1陣列1組RAID10陣列&#xff0c;4個全局熱備硬盤。 數據存儲中&#xff0…

Java基于springboot的個人理財系統

基于springboot的個人理財系統 摘要 隨著信息技術在管理上越來越深入而廣泛的應用&#xff0c;管理信息系統的實施在技術上已逐步成熟。本文介紹了個人理財系統的開發全過程。通過分析個人理財系統管理的不足&#xff0c;創建了一個計算機管理個人理財系統的方案。文章介紹了個…

多人音視頻實時通訊架構

直播中的協議與格式 在直播系統中&#xff0c;協議和格式的選擇對于傳輸效率、畫面質量和用戶體驗都至關重要。以下是直播中常見的協議與格式&#xff1a; 協議 RTSP (Real Time Streaming Protocol) RTSP是一個網絡流媒體協議&#xff0c;常用于視頻監控和IPTV等場景。它本身…

考研機試C++題目精選

更多內容會在godownio.github.io更新 算法練習&#xff08;C代碼&#xff09; 考研上機或C語言代碼筆試準備&#xff0c;暨大機試原題letcode牛客中南大等高校機試 快速冪算法 題目&#xff1a;輸入一個整數 n &#xff0c;求 n^n 的個位數是多少。 快速冪算法&#xff1a;…

面經分享|面了好未來NLP算法崗(實習),經歷坎坷但值了!

節前&#xff0c;我們組織了一場算法崗技術&面試討論會&#xff0c;邀請了一些互聯網大廠同學、參加社招和校招面試的同學&#xff0c;針對大模型技術趨勢、大模型落地項目經驗分享、新手如何入門算法崗、該如何備戰、面試常考點分享等熱門話題進行了深入的討論。 今天我分…

【復試2.293.1】c語言——基礎雜項

1.define定義常量類似全局變量&#xff0c;引用是直接拼到代碼中去。 2.關于e 3.參數傳遞 形參直接接收的是數組的起始地址 4.數組越界亂碼問題 5.scanf讀字符串的時候會自動在末尾放0&#xff08;結束符 6.scanf是讀取輸入緩沖區的數據&#xff0c;是一種拿走操作。讀取若有…