使用Bean注解覆盖XML定义 - Spring

4
我的Spring Boot应用程序包括一个作为依赖项的库项目。这个库项目有一个spring.xml文件,其中定义了许多bean。其中一个bean注入了另一个我在项目中不需要的外部依赖项,因此在启动我的应用程序时会出现错误。我想在我的应用程序中定义相同的bean作为java配置,并使spring-boot忽略spring.xml文件中的特定bean。但是,我希望所有其他的spring.xml中的bean都能被读取。
2个回答

4
在本地 Java 配置中定义一个与在 spring.xml 文件中继承的相同名称和类型的 Bean。
使用 @Primary 注释您的 bean,这将让您的 bean 被用于导入的 bean 之上。
您的应用程序仍将使用您继承的所有其他 Bean 的定义。
为了防止加载您实际上不需要的其他已定义的 Bean,您必须将 Bean 创建更改为lazy配置,即只有在明确使用时才会创建它们。
要在创建应用程序的主 Spring Boot 类中执行此操作(该类最有可能带有@SpringBootApplication/ @Configuration/ @EnableAutoConfiguration/ @ComponentScan注解),您应该在其上方添加@Lazy
通常,您会显式地注释要使用的Bean,但在这里无法这样做,因为它是从第三方jar中的spring.xml文件中产生的。这里的想法是从Spring配置的最高点清晰地声明所有bean都是lazy的。

感谢@UserF40。在我的情况下,spring.xml中定义的bean是无效的,因为它正在寻找我没有注入的依赖项。我在启动时看到了这个错误:“名称为'dbConfigurationManager'的bean定义无效”。 - Punter Vicky
当然,我会做的!!但是能否告诉我是否有一种方法可以解决我在问题中所解释的情况。 - Punter Vicky
这个解决方案可以实现这一点,它将读取 spring.xml 文件中除你在自己的配置中定义为 primary 的 bean 之外的所有 bean。 - UserF40
spring.xml 中的 bean 抛出错误,因为其中一个依赖项未被注入。我希望在加载 bean 时忽略该 bean。我认为将 bean 定义为注释可以帮助我解决这个问题。抱歉,我没有恰当地表达主题。 - Punter Vicky

1

看起来你想从其他jar包中包含spring.xml并排除xml中的一个bean。 我不知道spring框架是否提供了某种方法。 我更喜欢将spring.xml文件复制到新项目中并删除不必要的bean。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接