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

您的位置:首頁技術(shù)文章
文章詳情頁

詳解關(guān)于spring bean名稱命名的那些事

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

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

getBean(“aBService”)

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

getBean(ABService.class)

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

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

打印出來的結(jié)果,如下

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

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

02源碼查看

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

01從main方法直接調(diào)試斷點

詳解關(guān)于spring bean名稱命名的那些事

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

org.springframework.context.annotation.AnnotationBeanNameGenerator#generateBeanName

決定。

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

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

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

詳解關(guān)于spring bean名稱命名的那些事

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

03源碼驗證

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

org.springframework.context.annotation.AnnotationBeanNameGenerator

其生成規(guī)則代碼如下

@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和類名就一樣了,不會進行首字母小寫轉(zhuǎn)換。

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總結(jié)

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

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

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

標簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产一区二区三区黄网站 | 亚洲欧美高清| 日韩国产激情| 精品视频一区二区三区在线观看| 亚洲成人三区| 99精品美女| 亚洲人成在线网站| 色网在线免费观看| 日本午夜大片a在线观看| av最新在线| 日韩1区在线| 免费观看亚洲| 91精品韩国| 久久亚洲专区| 亚洲少妇一区| 亚洲精品福利| 国产精品嫩模av在线| 国产精品中文字幕亚洲欧美 | 蜜桃久久av| 夜久久久久久| 男女精品网站| 777久久精品| 国产精品3区| 首页国产精品| 日本a口亚洲| 91精品丝袜国产高跟在线| 青草综合视频| 亚洲欧洲另类| 日av在线不卡| 国产视频一区二区在线播放| 精品视频亚洲| 99久久九九| 免费久久99精品国产| 91欧美精品| 卡一精品卡二卡三网站乱码| 国产一区二区三区不卡视频网站| 日韩国产一区二| 国产伊人精品| 免费不卡在线视频| 国产精品videossex久久发布| 一区二区三区四区在线观看国产日韩| 精品国产第一福利网站| 激情亚洲影院在线观看| 免费看的黄色欧美网站| 国产精品麻豆成人av电影艾秋| 综合欧美亚洲| 国产日韩一区二区三区在线播放| 久久午夜精品| 嫩草伊人久久精品少妇av杨幂| 欧美1区2区3区| 国产一区导航| 欧美日韩va| 日韩欧美不卡| 亚州欧美在线| 国产精品国产一区| 九九99久久精品在免费线bt| 欧美三级网址| 日韩视频一二区| 欧洲av不卡| 波多野结衣久久精品| 在线视频观看日韩| 日韩高清在线一区| 91亚洲人成网污www| 丝袜美腿亚洲色图| 欧美黄色一区二区| 好吊一区二区三区| 久久精品国产99国产| 欧美日韩国产在线一区| 国产伦精品一区二区三区视频| 日韩在线电影| 国产一区二区三区天码| 亚洲免费网址| 一区二区三区四区日韩| 精品三级国产| 中文字幕av一区二区三区四区| 亚洲综合图色| 国产一区二区三区91| 一区二区三区四区日韩| 日韩精品久久久久久久软件91| 日韩影院免费视频| 荡女精品导航| 日本精品久久| 欧美日韩国产一区精品一区| 国产一区二区三区91| 日本精品国产| 红桃视频国产精品| 电影91久久久| 久久精品 人人爱| 亚洲免费网址| 色天使综合视频| 国产精品久久久久毛片大屁完整版| 欧美日本一区| 红桃视频国产一区| 女生影院久久| 欧美性www| 免费精品视频| 国产精品天天看天天狠| 免费在线欧美黄色| 亚洲综合精品四区| 91精品国产乱码久久久久久久| 在线看片不卡| 成人精品动漫一区二区三区| 国产视频一区二区在线播放| 在线观看亚洲精品福利片| 亚洲小说欧美另类婷婷| 精品久久久久中文字幕小说| 91精品国产自产观看在线| 蜜臀av亚洲一区中文字幕| 青草国产精品| 久久亚洲美女| 午夜视频精品| 亚洲午夜av| 精品日韩视频| 日韩亚洲一区在线| 久久久久久色 | 国产一区二区三区成人欧美日韩在线观看 | 久久香蕉网站| 亚洲精品中文字幕99999| 黄色亚洲精品| 亚洲女同一区| 91久久黄色| 亚洲手机在线| 91精品一区国产高清在线gif| 丝袜美腿亚洲一区| 亚洲精品a级片| 亚洲国产成人精品女人| 蜜桃国内精品久久久久软件9| 日韩av网站在线观看| 中文字幕一区二区精品区| 国产视频一区欧美| 图片区亚洲欧美小说区| 亚洲大全视频| 午夜在线精品| 蜜桃久久久久久| 国产偷自视频区视频一区二区| 精品午夜av| 国产极品嫩模在线观看91精品| 91九色精品| 欧美大黑bbbbbbbbb在线| 成人av二区| 国产中文字幕一区二区三区| 久久成人亚洲| 日韩中文字幕亚洲一区二区va在线 | 日韩精品一区二区三区av| 免费看的黄色欧美网站| 另类亚洲自拍| 亚洲精品九九| 久久激情五月婷婷| 久久在线91| 日韩伦理福利| 午夜精品亚洲| 一二三区精品| 日本午夜精品一区二区三区电影| 欧美亚洲国产精品久久| 久久亚洲国产| 免费人成精品欧美精品| 日韩高清在线一区| 精品国产中文字幕第一页| 首页亚洲欧美制服丝腿| 亚洲制服欧美另类| 国产欧美日韩一区二区三区四区 | 成人高清一区| 日本欧美不卡| 好吊一区二区三区| 日韩久久99| 精品国产欧美日韩| 五月婷婷六月综合| 日本中文字幕视频一区| 国产精品**亚洲精品| av高清一区| 免费久久99精品国产自在现线| 精品在线播放| 日韩精品一级二级 | 成人免费电影网址| 亚洲国产日韩欧美在线| 日韩成人高清| 亚洲91视频| 蜜臀久久99精品久久久久宅男| 亚洲欧美综合| 日韩精品亚洲专区| 蜜桃视频一区二区三区在线观看| 亚洲天堂一区二区| 在线综合欧美| 国产黄色一区| 欧美精品一二| 国产欧美日韩亚洲一区二区三区| 日韩精彩视频在线观看| 中文精品在线| 欧美日韩亚洲一区三区| 日韩av字幕| 不卡福利视频| 日本va欧美va欧美va精品| 日韩美女精品| 日本不良网站在线观看| 亚洲无线观看| 播放一区二区| 日韩高清电影一区| 久久精品播放| 国产精品日本一区二区三区在线| 自拍自偷一区二区三区|