gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:45:52 27 4
gpt4 key购买 nike

我正在为我的项目使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com