【问题标题】:Spring Boot @Configuration bean name conflictsSpring Boot @Configuration bean 名称冲突
【发布时间】:2016-12-06 14:15:41
【问题描述】:

我有一个项目,其中包含许多使用 @Configuration 类(Spring Integration 和 Spring Batch 的东西)定义 bean 的小型库,我经常遇到问题,因为两个库都有一个同名的 bean。

可以:

  • 为配置类的所有 bean 应用前缀
  • 如果存在两个同名的 bean,则强制应用程序在启动时崩溃
  • 使用其他解决方案,无需重新设计应用程序即可解决问题

【问题讨论】:

  • 对于库,Spring Boot 的 AutoConfiguration 比 @Configuraitons 更适合组件扫描或导入。 AutoConfiguration bean 名称默认为不冲突的类的完全限定名称.
  • 不确定我是否理解,我不明白应该如何使用 AutoConfiguration 来创建自定义 Spring Integration ServiceActivators 或 Spring Batch Steps。
  • 对于1,您可以使用SpringApplicationBuilder将自己的BeanNameGenerator注册到SpringApplication。顺便说一句,AutoConfigurations 是普通的 @Configurations,它们是由 Spring Boot 的 @EnableAutoConfigurtion 通过查找 META-INF/spring.factories 加载的,通常上面有 @ConditionOn*@ConfigurationProperties 以便于定制。
  • 简单而肮脏的方法是 @Bean(name = "fooBean") 并且您可以根据需要为每个库的每个 Bean 名称添加适当的前缀。如果我想出什么别的,我会回复的。

标签: spring spring-boot spring-java-config


【解决方案1】:

我理解你的意思是你有两个被 @Configuration 注释调用相同的 bean,这会发生冲突并且不会出现以下错误:

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [com.lapeira.formacion.CasoFinalApplication]; nested exception is org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'configuracion' for bean class [com.lapeira.formacion.seguridad.Configuracion] conflicts with existing, non-compatible bean definition of same name and class [com.lapeira.formacion.batch.Configuracion]

只需重命名这两个类之一,它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 2017-09-12
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多