日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

詳解關于spring bean名稱命名的那些事

瀏覽:22日期:2023-07-03 15:46:01
目錄前言02源碼查看01從main方法直接調試斷點02帶著問題查看,靠猜加驗證的方式03源碼驗證04總結前言

用了多年spring,一直想當然把spring默認的beanName當成是類名的首字母小寫,比如HelloService其beanName為helloService。直到有天對接了供方廠商的接口,他有個類形如ABService,于是用

getBean(“aBService”)

的方式獲取bean,結果取到是null,一開始以為是ABservice沒注入,后面采用

getBean(ABService.class)

能成功獲取到bean,說明ABService是有注入到IOC容器中,但是為啥用aBService獲取不到bean?于是就用如下代碼段,打印出相應ABService對應的beanName

applicationContext.getBeansOfType(ABService.class).forEach((beanName,bean)->{ System.out.println(beanName + ':' + bean);});

打印出來的結果,如下

ABService:com.github.lybgeek.ABService@245b6b85

beanName竟然是ABService,這就和之前的想當然有出入。于是只好查看源碼

02源碼查看

源碼查看有2種方式,本文的示例是springboot項目

01從main方法直接調試斷點

詳解關于spring bean名稱命名的那些事

從圖可以看出如果是以掃描注解注入形式,其beanName的生成規則是由

org.springframework.context.annotation.AnnotationBeanNameGenerator#generateBeanName

決定。

ps: 這種直接從main啟動類調試起,比較適用于時間比較多,或者排查毫無頭緒

02帶著問題查看,靠猜加驗證的方式

利用idea的find Usage查找引用,比如ABService的注解@service,我們可以直接查看哪個引用到@Service,再猜測下beanName的生成規則

詳解關于spring bean名稱命名的那些事

通過猜,我們基本上就可以定位出比較符合我們需求的方法

03源碼驗證

從上面的分析,我們可以知道如果是掃描bean注解注入的方式,其生成beanName規則,是在

org.springframework.context.annotation.AnnotationBeanNameGenerator

其生成規則代碼如下

@Override public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) { if (definition instanceof AnnotatedBeanDefinition) { String beanName = determineBeanNameFromAnnotation((AnnotatedBeanDefinition) definition); if (StringUtils.hasText(beanName)) {// Explicit bean name found.return beanName; } } // Fallback: generate a unique default bean name. return buildDefaultBeanName(definition, registry); }

從代碼段,我們可以看出,注解上有取名,比如@Service(“abService”),則beanName為abService,如果沒有取名,則看

protected 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); }

public static String decapitalize(String name) {if (name == null || name.length() == 0) { return name;}if (name.length() > 1 && Character.isUpperCase(name.charAt(1)) &&Character.isUpperCase(name.charAt(0))){ return name;}char chars[] = name.toCharArray();chars[0] = Character.toLowerCase(chars[0]);return new String(chars); }

其實從代碼我們就很容易看出答案了,如果類名前兩個或以上個字母都是大寫,則beanName和類名就一樣了,不會進行首字母小寫轉換。

decapitalize這個方法的注釋也寫得很清楚,注釋如下

/** * Utility method to take a string and convert it to normal Java variable * name capitalization. This normally means converting the first * character from upper case to lower case, but in the (unusual) special * case when there is more than one character and both the first and * second characters are upper case, we leave it alone. * <p> * Thus 'FooBah' becomes 'fooBah' and 'X' becomes 'x', but 'URL' stays * as 'URL'. * * @param name The string to be decapitalized. * @return The decapitalized version of the string. */04總結

通過掃描bean注解注入IOC時,如果不指定bean名稱的默認規則是類名的首字母小寫,如果類名前兩個或以上個字母都是大寫,那么bean名稱與類名一樣。

其實這個細節可能懂的都懂,本文的彩蛋主要是分享一下平時查看源碼的一點心得吧,哈哈

到此這篇關于spring bean名稱命名的文章就介紹到這了,更多相關spring bean名稱命名內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产极品嫩模在线观看91精品| 欧美日韩在线观看视频小说| 日本中文字幕一区二区| 成午夜精品一区二区三区软件| 午夜久久久久| 精品免费av| 中文不卡在线| 99精品电影| 国产精选在线| 国产精品夜夜夜| 亚洲精品一区二区在线看| 久久99蜜桃| 日韩1区2区3区| 蜜臀va亚洲va欧美va天堂 | 波多视频一区| 久久av影视| 91精品国产自产在线丝袜啪| 欧美一级精品| 久久久久久久久久久9不雅视频| 国产精品亚洲欧美日韩一区在线| 日韩精品一级二级| 午夜精品亚洲| 亚洲精品一级二级| 粉嫩av一区二区三区四区五区 | 亚洲综合二区| 欧洲激情综合| 亚洲精品网址| 美女尤物久久精品| 综合激情视频| 日韩激情一区二区| 91精品国产自产精品男人的天堂 | 99精品美女| 亚洲欧美伊人| 天使萌一区二区三区免费观看| 欧美1区免费| 亚洲视频播放| 亚洲精品九九| 色综合视频一区二区三区日韩 | 亚洲一区欧美激情| 亚洲欧美视频一区二区三区| 西西人体一区二区| 综合亚洲色图| 国产精品嫩草影院在线看| 日韩国产高清在线| 国产免费av一区二区三区| 久久精品二区亚洲w码| 日本不卡免费高清视频在线| 精品91久久久久| 国产精品22p| 蜜臀91精品国产高清在线观看| 蜜臀久久99精品久久久久宅男| 国产精品日本一区二区不卡视频 | 久久精选视频| 亚洲乱码一区| 国产精品黑丝在线播放| 国产亚洲综合精品| 美女视频黄免费的久久| 免费污视频在线一区| 蜜桃视频免费观看一区| 日本一不卡视频| 欧美福利在线| 国产精品分类| 在线精品视频一区| 欧美日韩一区二区三区视频播放| 欧美日本三区| 美国三级日本三级久久99| 国产色播av在线| 日本成人精品| 蜜桃国内精品久久久久软件9| 国产精品久久久久久久久久白浆| 尹人成人综合网| 欧美日韩精品免费观看视欧美高清免费大片| 亚洲专区视频| 亚洲视频国产| 美国三级日本三级久久99| 久久久久久免费视频| 日韩欧美精品一区| 国产精品黄色片| 国产精品最新自拍| 欧美伊人久久| 日本成人中文字幕| 日产欧产美韩系列久久99| 99久久亚洲精品蜜臀| 新版的欧美在线视频| 国产欧美日韩在线一区二区| 欧美久久精品| 欧美激情久久久久久久久久久| 欧美日韩一区二区三区不卡视频 | 91欧美极品| 国产精品99免费看| 四虎成人av| 久久亚洲成人| 午夜欧美在线| 免费精品视频最新在线| 日韩有码av| 国产精品啊v在线| 国际精品欧美精品| 国产综合视频| 视频在线观看国产精品| 国产精品主播在线观看| 在线天堂中文资源最新版| 精品中文字幕一区二区三区av| 日韩视频久久| 日韩亚洲精品在线观看| 国产精品一区高清| 成人在线超碰| 亚洲开心激情| 久久精品免费看| 亚洲无线一线二线三线区别av| 一区二区精品| 久久男人天堂| 欧美日韩99| 天使萌一区二区三区免费观看| 欧美日本不卡高清| 香蕉久久99| 国产精品igao视频网网址不卡日韩 | 日本欧美一区| 亚洲高清av| 国产乱子精品一区二区在线观看 | 欧美手机在线| 麻豆91在线播放| 日韩激情精品| 人人爽香蕉精品| 国产v综合v| 欧美影院精品| 蜜桃久久久久久久| 亚洲福利久久| 日韩大片在线| 色偷偷色偷偷色偷偷在线视频| 日韩精品一页| 美女网站久久| 日av在线不卡| 国产视频一区在线观看一区免费| 中文字幕系列一区| 成人日韩精品| 国产麻豆久久| 99久久99久久精品国产片果冰| 超碰超碰人人人人精品| 国产伦精品一区二区三区视频| 蜜臀av在线播放一区二区三区| 久久中文字幕二区| 国产91精品对白在线播放| 日韩免费视频| 波多野结衣一区| 亚洲在线观看| 国产欧美激情| 精品一区二区三区亚洲| 日本免费一区二区三区四区| 精品国产乱码久久久| 国产专区精品| 午夜国产精品视频| 欧美日韩亚洲一区在线观看| 国产精品自在| 中文字幕在线官网| 午夜精品久久久久久久久久蜜桃| 亚洲韩日在线| 国产精品亚洲综合久久| 中文字幕在线看片| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产欧美日韩综合一区在线播放| 国产一区调教| 在线看片一区| 神马久久午夜| 亚洲免费毛片| 日韩成人精品一区| 蜜桃视频一区二区三区在线观看| 国产精品一区二区免费福利视频| 夜鲁夜鲁夜鲁视频在线播放| 亚洲精品美女| 国产黄大片在线观看| 亚洲香蕉久久| 久久精品国产大片免费观看| 日本午夜精品一区二区三区电影| 肉色欧美久久久久久久免费看| 亚洲人成亚洲精品| 国产综合精品一区| 蜜臀久久99精品久久久画质超高清| 亚洲精品黄色| 中文在线资源| 蜜臀久久精品| 久久久久免费| 亚洲日本网址| 婷婷中文字幕一区| 国产精品腿扒开做爽爽爽挤奶网站| 老色鬼精品视频在线观看播放| 国产精品亲子伦av一区二区三区| 日韩高清中文字幕一区| 四虎成人精品一区二区免费网站| 亚洲精品第一| 精品欠久久久中文字幕加勒比| 最近国产精品视频| 亚洲二区视频| 国产在线日韩| 欧美国产一级| 精品99久久| 国产aⅴ精品一区二区三区久久 | 国产精品亚洲欧美日韩一区在线| 亚洲涩涩av| 三级欧美在线一区| 亚洲综合丁香|