【小知识】移除不需要的Spring Bean

背景

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 {
        }
    };
}

你可能感兴趣的:(springjava)