在java配置中覆盖bean定义



我有一个配置类

@Configuration
public class FooConfig{
  @Bean
  public FooService fooService() { ... }
  @Bean
  public AbcService abcService() { ... }
}

这个类定义在一个我不能改变的库中。我有一个项目,在很多地方都使用了FooService。在我的项目中,我有另一个配置类

@Configuration
@Import({
  FooConfig.class,
   
})
public class BarConfig{
  @Autowired AbcService abc;
  ...    
}
这里使用

AbcService是因为存在依赖于该服务的服务,而这些服务在BarConfig中声明。但是,这里不使用FooService(它仅在控制器中使用)

我需要改变FooService的实现。我可以在BarConfig中定义新的FooService bean吗?

是否会覆盖通过FooConfig导入的现有定义?

可以多次重新定义相同的bean名称,spring容器将把为给定名称处理的最后一个bean定义作为获胜的定义。在您的示例中,由于包含无法更改的配置的核心项目不依赖于您在项目中定义的任何bean,因此如果重新定义FooService bean.,它将正常工作之前有很多关于如何重写bean定义的答案,您可以查看以获得更多信息。

  • 在spring中重写bean配置
  • 在子上下文中重写父上下文中定义的bean
  • Spring's override bean

最新更新