成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:3日期: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
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
精品一区二区三区不卡| 91在线国产观看| jiyouzz国产精品久久| 在线精品视频一区二区三四| 一区二区三区蜜桃网| 欧美人与禽性xxxxx杂性| 欧美成人性福生活免费看| 国产传媒欧美日韩成人| 欧美怡红院视频| 亚洲成人777| 日韩亚洲欧美精品| 国产精品久久久一本精品| 99国产精品一区| 欧美一级xxx| 国产一区二区三区在线观看精品 | 石原莉奈一区二区三区在线观看| 亚洲国产日韩欧美| 综合久久久久久久| 欧美精品首页| 中文字幕va一区二区三区| 欧美成人日韩| 欧美精彩视频一区二区三区| 成人黄动漫网站免费app| 日韩欧美一卡二卡| 高清国产一区二区三区| 91精品国产91久久综合桃花| 国产一区二区伦理| 欧美一区二区三区视频| 国产激情视频一区二区在线观看| 欧美色图天堂网| 精品亚洲成a人| 欧美老女人在线| 国产精品一卡二| 91精品国产丝袜白色高跟鞋| 国产伦精一区二区三区| 91精品欧美久久久久久动漫| 国产iv一区二区三区| 日韩精品一区二区在线| 成人av网站免费观看| 国产偷国产偷精品高清尤物| 欧美日韩免费精品| 精品国产乱码久久久久久牛牛 | 国产精品夜夜夜一区二区三区尤| 亚洲综合精品自拍| 在线一区欧美| 亚洲va在线va天堂| 欧美在线不卡视频| 国产精品一区二区三区99| 日韩一区二区在线观看视频| 成人国产免费视频| 久久精品人人做人人综合| 欧美在线首页| 中文字幕一区二区三中文字幕| 在线视频一区观看| 亚洲成a人v欧美综合天堂下载| 色狠狠av一区二区三区| 国产尤物一区二区| 欧美xxxx老人做受| 色综合一个色综合| 激情丁香综合五月| 7777女厕盗摄久久久| 91性感美女视频| 18欧美亚洲精品| 免费h精品视频在线播放| 九九九久久久精品| 精品久久久影院| 欧美三级不卡| 亚洲欧美激情插| 久久综合福利| 国产精品一区二区不卡| 国产午夜精品一区二区三区四区| 欧美日韩一区二区三区四区在线观看 | 亚洲美女色禁图| 日韩精品一区第一页| 在线观看www91| 高清不卡一二三区| 国产精品丝袜一区| 国产亚洲在线| 美腿丝袜一区二区三区| 欧美一区二区观看视频| 欧美日韩精品| 天天免费综合色| 日韩欧美国产小视频| 亚洲高清资源综合久久精品| 午夜精品福利视频网站| 欧美一区欧美二区| 欧美性天天影院| 亚洲福中文字幕伊人影院| 欧美色视频一区| 99久久精品久久久久久清纯| 91精品福利视频| 成人免费不卡视频| 亚洲欧美激情视频在线观看一区二区三区| 色悠悠久久综合| 国产精品一区不卡| 亚洲黄色免费电影| 欧美视频在线一区| 97久久超碰国产精品| 亚洲人成在线观看一区二区| 色综合久久久久综合99| 国产成人自拍高清视频在线免费播放| 国产无一区二区| 欧洲另类一二三四区| 欧美在线首页| 美女视频网站黄色亚洲| 国产精品美日韩| 欧美日韩亚洲丝袜制服| 国产精品mv在线观看| 久久国产精品无码网站| 国产精品国产精品国产专区不片 | 色乱码一区二区三区88| 91视频免费播放| 丝袜诱惑制服诱惑色一区在线观看| 日韩一区二区免费在线电影| 中国女人久久久| 波多野结衣亚洲| 男人的j进女人的j一区| 中文字幕在线播放不卡一区| 欧美日韩在线电影| 亚洲视频1区| 91在线观看美女| 麻豆成人在线观看| 亚洲免费观看高清| 日韩欧美www| 老司机一区二区三区| 欧美一区二区三区久久精品茉莉花| 青草av.久久免费一区| 综合久久久久久久| 日韩久久精品一区| 色婷婷综合激情| 亚洲国产mv| 99re在线视频这里只有精品| 免费成人在线视频观看| 国产精品全国免费观看高清 | 亚洲午夜av| www.欧美色图| 精品亚洲国内自在自线福利| 亚洲午夜影视影院在线观看| 国产亚洲欧美一级| 欧美日韩小视频| 亚洲在线电影| 亚洲视频免费| 99精品久久免费看蜜臀剧情介绍| 奇米精品一区二区三区在线观看一| 中文字幕日韩一区| 精品成人一区二区| 欧美久久久久久久久中文字幕| 毛片一区二区| 99视频+国产日韩欧美| 欧美区一区二| 99视频在线精品| 国产九九视频一区二区三区| 视频一区二区欧美| 一区二区三区欧美视频| 中文字幕一区二区三区精华液| 久久久www成人免费毛片麻豆 | 亚洲精品乱码久久久久久久久 | 国产亚洲精品福利| 欧美一级日韩免费不卡| 91高清视频免费看| 亚洲一区二区三区免费在线观看| 亚洲无毛电影| 欧美日韩一区在线播放| 欧美黄色大片网站| 99久久免费精品| 国产成人av在线影院| 国产一区激情在线| 狠狠色丁香久久婷婷综合_中| 奇米精品一区二区三区四区| 亚洲高清一区二区三区| 亚洲自拍偷拍av| 一区二区三国产精华液| 亚洲女与黑人做爰| 亚洲欧洲日韩女同| 中文字幕在线不卡一区| 国产精品久久久久久久午夜片| 国产日韩欧美高清| 国产视频一区二区在线观看| 久久婷婷一区二区三区| 久久综合狠狠综合久久激情 | 成人ar影院免费观看视频| 成人免费毛片app| 成人精品一区二区三区中文字幕 | 国产精品一区二区在线观看| 一区二区三区导航| 在线亚洲观看| 先锋a资源在线看亚洲| 免费亚洲婷婷| 色综合久久久久| 欧美主播一区二区三区| 欧美日韩的一区二区| 欧美一区二区三区在| 日韩美女一区二区三区| 2023国产精品| 欧美激情中文不卡| 亚洲欧洲av在线| 一区二区三区视频在线观看| 亚洲国产精品久久艾草纯爱| 日韩一区精品字幕| 麻豆精品国产91久久久久久|