覆盖 Java 配置中的 Bean 定义

2022-09-02 13:44:00

我有一个配置类

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

该类是在我无法更改的库中定义的。我有一个项目,在很多地方都使用。在我的项目中,我有另一个配置类FooService

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

AbcService在此处使用,因为有些服务依赖于该服务,并且这些服务在 中声明。但是,此处不使用(仅在控制器中使用)BarConfigFooService

我需要更改 的实现。我可以在 中定义新豆吗?它是否会覆盖通过 导入的已经存在的定义?FooServiceFooServiceBarConfigFooConfig


答案 1

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


答案 2

推荐