SpringBoot中如何修改BeanDefinition?


在实例化Bean对象之前,Spring IOC需要读取Bean的相关属性,将其保存在BeanDefinition对象中,然后通过BeanDefinition对象将Bean对象实例化。

如果你想修改BeanDefinition对象中的属性怎么办?

答案是:我们可以实现BeanFactoryPostProcessorinterfaces

@Component
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
    
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
        DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableListableBeanFactory;
        BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(User.class);
        beanDefinitionBuilder.addPropertyValue("id", 123);
        beanDefinitionBuilder.addPropertyValue("name", "Tom");
        defaultListableBeanFactory.registerBeanDefinition("user", beanDefinitionBuilder.getBeanDefinition());
    }
}

在postProcessBeanFactory方法中,你可以获得BeanDefinition的相关对象并修改该对象的属性。