先看下接口定义:/***允许自定义修改应用程序上下文的*bean定义的工厂钩子,适应上下文底层*bean工厂的bean属性值。*......*@authorJuergenHoeller*@authorSamBrannen*@since06.07.2003*@seeBeanPostProcessor*@seePropertyResourceConfigurer*/@FunctionalInterfacepublicinterfaceBeanFactoryPostProcessor{/***在之后修改应用程序上下文的内部bean工厂它的标准*初始化。所有bean定义都将被加载,但还没有beans*被实例化。这允许覆盖或添加*属性,甚至是急切初始化的bean。*@parambeanFactory应用程序上下文使用的bean工厂*@throwsorg.springframework.beans.BeansException在错误的情况下*/voidpostProcessBeanFactory(ConfigurableListableBeanFactorybeanFactory)throwsBeansException;}关于BeanFactoryPostProcessor接口,评论是这样说的:这是一个扩展点,为用户提供了在applicationcontext中修改bean定义和在beanfactorycontext中重写bean属性值的能力。这是关于BeanDefinition类的附加帖子。注释:/***BeanDefinition描述了一个bean实例,它具有属性值、*构造函数参数值和*具体实现提供的更多信息。*.....**/然后再看一下BeanFactoryPostProcessor的postProcessBeanFactory方法说明:当bean定义已经加载完毕(比如从xml文件解析出来的bean进入到beanDefinitionMap中)但是已经没有被实例化,这些bean定义的属性可以被修改。再看BeanFactoryPostProcessor的子类:下面写个例子修改bean定义。这是一个Person类,它有一个name属性。查看配置文件:现在我们想给这个Person对象动态添加一个属性:classCustomBeanDefinitionRegistryPostProcessorimplementsBeanFactoryPostProcessor{/***@paramconfigurableListableBeanFactory*@throwsBeansException*/@OverridepublicvoidpostProcessBeanFactory(ConfigurableListableBeanFactoryconfigurableListableBeanFactory)throwsBeansException{BeanDefinitionbeanDefinition=configurableListableBeanFactory.getBeanDefinition("person");PropertyValuepropertyValue=newPropertyValue("兴趣","写作");beanDefinition.getPropertyValues().addPropertyValue(propertyValue);}}classPerson{私有字符串名称;//get(),set()}上面是修改已有bean定义的属性,那么能不能在springcontext中动态添加一个bean呢?可以使用BeanFactoryPostProcessor的子类BeanDefinitionRegistryPostProcessor:classCustomBeanDefinitionRegistryPostProcessor实现BeanDefinitionRegistryPostProcessor{/***@parambeanDefinitionRegistry*@throwsBeansException*/@OverridepublicvoidpostProcessBeanDefinitionRegistry(BeanDefinitionRegistrybeanDefinitionRegistry)throwsBeansException{RootBeanDefinitionbeanDefinition=newRootBeanDefinition(Person.class);beanDefinitionRegistry.registerBeanDefinition("人",beanDefinition);}}classPerson{私有字符串名称;//get(),set()}对于一个普通的Person对象,我们通过重写postProcessBeanDefinitionRegistry方法将其添加到springIOC容器中