BeanDefinitionRegistryPostProcessor跟其他PostProcessor一样,见名知意,其提供了允许我们操作BeanDefinitionRegistry的入口,其接口定义如下:
1 | public interface BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor { |
可见BeanDefinitionRegistryPostProcessor继承了BeanFactoryPostProcessor接口,两者提供的供用户自定义的入口不一样,前者提供了BeanDefinitionRegistry,即可修改生成bean实例的模版定义,后者提供了ConfigurableListableBeanFactory,也可获取BeanDefinition,但顺序相对前者更靠后。
Spring官方解释是:BeanDefinitionRegistryPostProcessor允许在正常的BeanFactoryPostProcessor检测开始之前注册更多的自定义bean。特别是,BeanDefinitionRegistryPostProcessor可以注册更多的BeanDefinition,然后定义BeanFactoryPostProcessor实例(因为继承自它)。也就是说可以借此方法实现自定义的bean。
调用该接口实现时,所有的BeanDefinition已经加载到BeanDefinitionRegistry完毕,但是还没有通过这些BeanDefinition实例化出bean实例,此时我们可以在此处修改BeanDefinition,从而影响实例化出来的bean。
示例
通过新建BeanDefinition直接注册上去。通过@Autowire直接就可以获取。
1 | @Configuration |