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