SpringBean


重写bean实例

自定义bean覆盖


@Component
public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
    private static String SPECIAL_OVERRIDE_BEAN = "healthMessageQueueLogService";

    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        boolean isContainsSpecialBean = ((DefaultListableBeanFactory) registry).containsBean(SPECIAL_OVERRIDE_BEAN);
        if (isContainsSpecialBean) {
            AnnotatedBeanDefinition healthMessageBeanDefinition = (AnnotatedBeanDefinition) registry.getBeanDefinition(SPECIAL_OVERRIDE_BEAN);
            if (healthMessageBeanDefinition != null) {
                AnnotatedGenericBeanDefinition myBeanDefinition = new AnnotatedGenericBeanDefinition(healthMessageBeanDefinition.getMetadata());
                //忽略 beanClass originatingBeanDefinition字段
                BeanUtils.copyProperties(healthMessageBeanDefinition, myBeanDefinition, "beanClass", "originatingBeanDefinition");
                //设置自定义的bean class
                myBeanDefinition.setBeanClass(MyHealthMessageQueueLogService.class);
                //重新加载自定义的bean class
                try {
                    myBeanDefinition.resolveBeanClass(Thread.currentThread().getContextClassLoader());
                    registry.registerBeanDefinition(SPECIAL_OVERRIDE_BEAN, myBeanDefinition);
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {

    }
}

自定义移除重写的bean

@ComponentScan(
        basePackages = {"com.basic", "com.system", "com.business"},
        excludeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com.zh.core.service.SysUserBasicService"))

文章作者: 艾茜茜
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 艾茜茜 !
  目录