解決springboot生成bean名稱沖突(AnnotationBeanNameGenerator)
springboot生成bean名稱沖突
問題描述
我們?cè)偈褂胹pringboot的時(shí)候,在不同的文件目錄下,可能存在相同名稱的java類,這個(gè)時(shí)候會(huì)報(bào)bean name沖突錯(cuò)誤
首先我們來了解下,springboot生成bean名稱的原理
當(dāng)Component,Respository,Service,Controller注解的value樹形沒有自定義時(shí),會(huì)根據(jù)類的名稱生成一個(gè)短的bean name。例如: com.xyz.FooServiceImpl -> fooServiceImpl
也就是說,會(huì)忽略路徑,生成首字母小寫的bean name,所以,上面哪種情況會(huì)導(dǎo)致沖突
但是由于我們平時(shí)編碼的習(xí)慣,幾乎避免了這個(gè)重名文件的存在,所以,沒遇到過這個(gè)錯(cuò)誤
解決問題
使用自定義AnnotationBeanNameGenerator
@SpringBootApplication @RestController @ComponentScan(nameGenerator = DatabasesApplication.SpringBeanNameGenerator.class) public class DatabasesApplication { public static class SpringBeanNameGenerator extends AnnotationBeanNameGenerator { @Override protected String buildDefaultBeanName(BeanDefinition definition) { return definition.getBeanClassName(); } } public static void main(String[] args) { SpringApplication.run(DatabasesApplication.class, args); } @GetMapping("/hello") public String hello(){ return "hello databases!"; } }
我是在做springboot實(shí)現(xiàn)多數(shù)據(jù)源時(shí)還有個(gè)其他地方使用
MapperScan注解中使用
@MapperScan(basePackages = "com.databases.databases.dao.one", sqlSessionFactoryRef = "oneSqlSessionFactory",nameGenerator = DatabasesApplication.SpringBeanNameGenerator.class)
自定義bean對(duì)象重名問題
在已經(jīng)有對(duì)象的情況下,設(shè)置bean加載的時(shí)候注意不要重名
不然啟動(dòng)不了,會(huì)給你提示在配置文件中添加spring.main.allow-bean-definition-overriding=true 這個(gè)東西的意思是當(dāng)有重名bean的時(shí)候覆蓋上一個(gè),不建議使用,畢竟每個(gè)bean對(duì)象都是獨(dú)特的
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java 反射和動(dòng)態(tài)代理詳解及實(shí)例代碼
這篇文章主要介紹了java 反射和動(dòng)態(tài)代理詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-09-09基于params、@PathVariabl和@RequestParam的用法與區(qū)別說明
這篇文章主要介紹了方法參數(shù)相關(guān)屬性params、@PathVariabl和@RequestParam用法與區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08詳解hashCode()和equals()的本質(zhì)區(qū)別和聯(lián)系
這篇文章主要介紹了詳解hashCode()和equals()的本質(zhì)區(qū)別和聯(lián)系,本文先對(duì)兩種方法作了介紹,然后對(duì)二者聯(lián)系進(jìn)行分析,具有一定參考價(jià)值,需要的朋友可以了解下。2017-09-09Java基于JavaMail實(shí)現(xiàn)向QQ郵箱發(fā)送郵件
這篇文章主要為大家詳細(xì)介紹了Java基于JavaMail實(shí)現(xiàn)向QQ郵箱發(fā)送郵件的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-01-01SpringBoot使用Editor.md構(gòu)建Markdown富文本編輯器示例
這篇文章主要介紹了SpringBoot使用Editor.md構(gòu)建Markdown富文本編輯器示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03SpringBoot整合Javamail實(shí)現(xiàn)郵件發(fā)送功能
郵件發(fā)送是一個(gè)很普遍的功能,springboot整合了相關(guān)的starter,本文給大家介紹了可以實(shí)現(xiàn)一個(gè)簡(jiǎn)單的郵件發(fā)送功能的實(shí)例,文中通過代碼給大家介紹的非常詳細(xì),感興趣的朋友可以參考下2023-12-12MyBatis綁定錯(cuò)誤提示BindingException:Invalid bound statement (not f
這篇文章主要介紹了MyBatis綁定錯(cuò)誤提示BindingException:Invalid bound statement (not found)的解決辦法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-01-01