背景
SpringBoot项目引入公司其他公共基础包,项目启动时Spring初始化了基础包里的Bean,其中有个Bean跟项目已有的Bean有冲突,影响到了服务。
方案
项目启动时不让Spring初始化这个有冲突的Bean。
实践
Spring 提供了BeanDefinitionRegistry
接口来操作注册的Bean列表beanDefinitionMap
。
@Bean
public BeanDefinitionRegistryPostProcessor removeRegistryBeanPostProcessor() {
return new BeanDefinitionRegistryPostProcessor() {
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
if (registry.containsBeanDefinition("要从注册列表中移除的Bean名称")) {
registry.removeBeanDefinition("要从注册列表中移除的Bean名称");
}
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
}
};
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。