Spring BeanFactoryPostProcessor

在通过BeanFactoryPostProcessor来手动干预springbean加载状态时,有两点需要注意:

  1. 是否需要实现PriorityOrdered接口。
    spring处理BeanFactoryPostProcessor类型的bean,主要是通过AbstractApplicationContext中的invokeBeanFactoryPostProcessors来处理,主要代码如下:


    Spring BeanFactoryPostProcessor_第1张图片
    image.png

    实现了PriorityOrdered接口的Processor会放在第一优先级队列中执行,并且通过设置优先级,可以执行Processor的执行顺序(注意:Spring自带的Processor都被默认设置了最低优先级)。

  2. 是否需要初始化bean
    ListableBeanFactory中有个重要的接口getBeanNamesForTypes,该接口支持两种传参类型,若不希望在调用接口后会触发bean的初始化工作,需使用String[] getBeanNamesForType(Class type, boolean includeNonSingletons, boolean allowEagerInit),并将最后的allowEagerInit参数置为true。

你可能感兴趣的:(Spring BeanFactoryPostProcessor)