嵌套类 @Configuration @Bean 创建中的 spring Bean

默认情况下已禁用升级到 spring-boot 2.1.0.M4 Bean 覆盖。如果您依赖覆盖,则需要将 spring.main.allow-bean-definition-overriding 设置为 true。


但是为什么在内部类中定义的 Bean 也被视为重复的 bean 定义。这是一个错误吗?或者这有什么解释?


例如:


@Configuration

public class BusinessLogicConfig {


    @Configuration

    class BusinessLogicSourceConfig {

        @Bean

        public BusinessLogic businessLogic() {

            return new BusinessLogic("source");

        }

    }

}

工作正常到 spring-boot 2.0.x


但是当使用例如 spring-boot 2.1.0.M4 时,它在启动时给我一个错误:


The bean 'businessLogic', defined in class path resource [com/example/di/bootconfigs/BusinessLogicConfig$BusinessLogicTier1Config.class], could not be registered.

A bean with that name has already been defined in URL [jar:file:/.../di/build/libs/di-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/com/example/di/businesslogic/BusinessLogic.class]

and overriding is disabled.


Action:


Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

由于我显然只有一个 bean 定义(仅在内部 @Configuration 类中定义),这对我来说似乎是一个错误。


波斯汪
浏览 262回答 1
1回答

大话西游666

原来它不是@Configuration 类嵌套。它是 BusinessLogic 类本身,它是一个名为 BusinessLogic 的 Bean,因为它是一个 @Component。所以上面创建了一个名为 BusinessLogic 的 Bean 的第二个版本。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java