在实例化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的相关对象并修改该对象的属性。