【问题标题】:Bean Annotation to override XML definition - Spring覆盖 XML 定义的 Bean 注解 - Spring
【发布时间】:2017-02-18 00:46:48
【问题描述】:

我的 spring-boot 应用程序包含另一个库项目作为依赖项。这个库项目有一个 spring.xml 文件,其中定义了许多 bean。其中一个 bean 注入了另一个外部依赖项,我在项目中不需要它。因此,当我启动我的应用程序时,这会引发错误。我想在我的应用程序中将相同的 bean 定义为 java 配置,并使 spring-boot 忽略 spring.xml 文件中的特定 bean。但是我希望读取 spring.xml 中的所有其他 bean。

【问题讨论】:

    标签: java spring spring-boot


    【解决方案1】:

    在本地 java 配置中定义一个与 spring.xml 文件中继承的名称和类型相同的 bean。

    使用 @Primary 注释您的 bean,这将使您的 bean 用于导入的。

    您的应用程序仍将使用您继承的所有其他 bean 的定义。

    为了防止加载您实际上不需要的其他已定义 bean,您必须将 bean 创建更改为 lazy 配置,也就是说,它们仅在显式使用时才会创建。

    要在创建应用程序的主 Spring 引导类中执行此操作,很可能使用 @SpringBootApplication/ @Configuration/ @EnableAutoConfiguration/ @ComponentScan 注释,您应该在其上方添加 @Lazy

    通常您会显式地注释有问题的 Bean,但在这里无法完成,因为它源自 3rd 方 jar 中的 spring.xml 文件。这里的想法是从 spring 配置的最高点清楚地声明所有 bean 都是惰性的。

    【讨论】:

    • 感谢@UserF40。在我的例子中,spring.xml 中定义的 bean 是无效的,因为它正在寻找我没有注入的依赖项。我在启动“名称为 'dbConfigurationManager' 的 bean 定义无效”时看到此错误
    • 当然可以!但是是否有可能让我知道是否有办法绕过我在问题中解释的情况。
    • 这个解决方案是这样做的,除了你在自己的配置中定义为主要的之外,spring.xml 文件中的所有 bean 都将被读取。
    • spring.xml 中的 bean 抛出错误,因为其中一个依赖项没有注入。我希望在加载 bean 时忽略该 bean。我认为将 bean 定义为注释将帮助我绕过它。对不起,我确实恰当地表达了这个主题。
    【解决方案2】:

    您似乎想从其他 jar 中包含 spring.xml 并在 xml 中排除一个 bean。 我不知道spring框架提供了一些方法。 我更喜欢将 spring.xml 文件复制到新项目并删除不必要的 bean。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      相关资源
      最近更新 更多