0

有人可以解释一下吗?阅读文档后,我不明白。

Spring 是否可以懒惰地初始化 Bean(Factory)PostProcessor?

https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-factory-extension-factory-postprocessors

有一个这样的块让我感到困惑:

与 BeanPostProcessors 一样,您通常不希望将 BeanFactoryPostProcessors 配置为延迟初始化。如果没有其他 bean 引用 Bean(Factory)PostProcessor,则该后处理器根本不会被实例化。因此,将其标记为延迟初始化将被忽略,并且即使您在元素的声明中将 default-lazy-init 属性设置为 true,Bean(Factory)PostProcessor 也会被急切地实例化。

4

1 回答 1

0

问题的正确答案:“Spring 可以懒惰地初始化 Bean(Factory)PostProcessor 吗?” “否”。我自己查了一下。我创建了 2 个类:

@Lazy
@Component
public class CustomBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        System.out.println("bean factory!");
    }
}

@Lazy
@Component
public class CustomBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("before init!");
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }
}

并运行 spring 应用程序。因此,在控制台中它被打印:“bean factory”和几次“初始化之前”,尽管我在这些类上放置了@Lazy 注释。

于 2018-11-13T06:36:41.377 回答