服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 解决springboot生成bean名称冲突(AnnotationBeanNameGenerator)

解决springboot生成bean名称冲突(AnnotationBeanNameGenerator)

2022-10-21 15:10生产队队长 Java教程

这篇文章主要介绍了解决springboot生成bean名称冲突(AnnotationBeanNameGenerator),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

springboot生成bean名称冲突

问题描述

我们再使用springboot的时候,在不同的文件目录下,可能存在相同名称的java类,这个时候会报bean name冲突错误

解决springboot生成bean名称冲突(AnnotationBeanNameGenerator)

首先我们来了解下,springboot生成bean名称的原理

当Component,Respository,Service,Controller注解的value树形没有自定义时,会根据类的名称生成一个短的bean name。例如: com.xyz.FooServiceImpl -> fooServiceImpl

也就是说,会忽略路径,生成首字母小写的bean name,所以,上面哪种情况会导致冲突

但是由于我们平时编码的习惯,几乎避免了这个重名文件的存在,所以,没遇到过这个错误

解决问题

使用自定义AnnotationBeanNameGenerator

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@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实现多数据源时还有个其他地方使用

MapperScan注解中使用

?
1
@MapperScan(basePackages = "com.databases.databases.dao.one", sqlSessionFactoryRef = "oneSqlSessionFactory",nameGenerator = DatabasesApplication.SpringBeanNameGenerator.class)

自定义bean对象重名问题

在已经有对象的情况下,设置bean加载的时候注意不要重名

解决springboot生成bean名称冲突(AnnotationBeanNameGenerator)

不然启动不了,会给你提示在配置文件中添加spring.main.allow-bean-definition-overriding=true  这个东西的意思是当有重名bean的时候覆盖上一个,不建议使用,毕竟每个bean对象都是独特的

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/Brave_heart4pzj/article/details/106527849

延伸 · 阅读

精彩推荐
  • Java教程详解Java多线程tryLock()方法使用

    详解Java多线程tryLock()方法使用

    本文主要介绍了Java多线程tryLock()方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    不高兴就喝水叭9142022-03-06
  • Java教程你知道Spring中为何不建议使用字段注入吗

    你知道Spring中为何不建议使用字段注入吗

    这篇文章主要给大家介绍了关于Spring中为何不建议使用字段注入的相关资料,通过本文你将对Spring的引入方式有更一步的了解,需要的朋友可以参考下...

    EchoLv7562021-12-01
  • Java教程java 文件下载支持中文名称的实例

    java 文件下载支持中文名称的实例

    下面小编就为大家分享一篇java 文件下载支持中文名称的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    无知死循环3872022-02-13
  • Java教程Java调用CXF WebService接口的两种方式实例

    Java调用CXF WebService接口的两种方式实例

    今天小编就为大家分享一篇关于Java调用CXF WebService接口的两种方式实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起...

    小飞侠-210022021-07-20
  • Java教程Java之Buffer属性案例详解

    Java之Buffer属性案例详解

    这篇文章主要介绍了Java之Buffer属性案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    pengjunlee5652021-11-10
  • Java教程android中GridView的用法示例

    android中GridView的用法示例

    这篇文章主要介绍了android中GridView的用法,对于Android初学者很有参考学习价值,需要的朋友可以参考下 ...

    shichen20142162019-11-26
  • Java教程SpringMVC解析post请求参数详解

    SpringMVC解析post请求参数详解

    今天小编就为大家分享一篇解决SpringMVC接收不到ajaxPOST参数的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    Eternity4652021-11-25
  • Java教程IntelliJ安装并使用Rust IDE插件

    IntelliJ安装并使用Rust IDE插件

    这篇文章主要介绍了IntelliJ安装并使用Rust IDE插件,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    姜家志10992021-06-28