java - spring boot多模块项目中bean名称相同的问题

标签 java spring spring-boot multi-module

我正在为我的项目使用 Spring boot Multi-Module。 这里的问题是,我有 2 个模块 - Module AModule B

模块 A 包含 bean- 模块服务.java

模块 B 包含 bean- 模块服务.java

现在在编译时出现错误,提示同名 Bean 已存在。当我使用 10 个模块并使用 IDE 运行单个模块时,无法跟踪每个模块中的 bean 名称。有解决办法吗?

最佳答案

由于您看到了重复的 bean 名称异常,我假设您至少使用了 Spring Boot 2.1.0,因为 bean 覆盖现在是一个异常,除非使用 spring.main.allow-bean- 显式启用定义覆盖 = true

Spring Boot 使用的默认 bean 命名策略是导入的 bean 使用完全限定的类名命名,而上下文扫描的 bean 仅使用短名称。 See source here .

假设您的 bean 是上下文扫描的,因此在短类名而不是完全限定名称上发生冲突,那么您可以告诉 Spring Boot 在您的主类中使用完全限定命名策略。只需从上面链接的 ConfigurationClassPostProcessor 复制几行源代码:

import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.AnnotationBeanNameGenerator;
import org.springframework.util.Assert;

public static void main(String[] args) {

  new SpringApplicationBuilder(Application.class)
      .beanNameGenerator(new AnnotationBeanNameGenerator() {
        @Override
        protected String buildDefaultBeanName(BeanDefinition definition) {
          String beanClassName = definition.getBeanClassName();
          Assert.state(beanClassName != null, "No bean class name set");
          return beanClassName;
        }
      })
      .run(args);
}

此策略将遵循您添加到 bean 的注释提供的任何 bean 命名指令。

关于java - spring boot多模块项目中bean名称相同的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55843952/

相关文章:

java - RecyclerView 不显示任何内容

java - Spring - 无法连接到邮件服务器

spring - 尝试将 JPA 与 Kotlin 和 Spring boot 结合使用时出现 BeanDefinitionParsingException

java - 显示 Hibernate 属性值

java - 将实体及其所有相关实体保存在 spring boot jpa 中的单个保存中

java - 旧 servlet-api-2.3.jar 上的 HttpServletRequest 注销

java - 在 Ubuntu 上执行 Java 会产生乱码输出

java - SortedMap 中的映射值

java - Spring MVC 文件上传帮助

java - 使用 spring 表单使用 jsp 中现有的 localdatetime 对象填写 datetime-local 字段