我有一个configuartion类
@Configuration
public class FooConfig{
@Bean
public FooService fooService() { ... }
@Bean
public AbcService abcService() { ... }
}
该类在lib中定义,我无法更改。我有一个项目,其中FooService
在许多地方使用。在我的项目中,我有另一个配置类
@Configuration
@Import({
FooConfig.class,
})
public class BarConfig{
@Autowired AbcService abc;
...
}
此处使用 AbcService
,因为有些服务依赖于该服务,并且服务是在BarConfig
中声明的。但是,此处未使用FooService
(仅在控制器中使用)
我需要更改FooService
的实现。我可以在FooService
中定义新的BarConfig
bean吗?它是否会覆盖通过FooConfig
导入的已存在的定义?
答案 0 :(得分:10)
您可以多次重新定义相同的bean名称,spring容器将为给定名称处理的最后一个bean定义为获胜者。
在您的情况下,作为包含您无法更改的配置的核心项目不依赖于您在项目中定义的任何bean,如果您重新定义FooService
bean.
,它将正常工作
关于如何覆盖bean定义之前有很多答案,你可以看看有更多的信息。