【问题标题】:Can Spring init Bean(Factory)PostProcessor lazily?Spring 可以懒惰地初始化 Bean(Factory)PostProcessor 吗?
【发布时间】:2018-11-12 17:41:28
【问题描述】:

谁能解释一下?阅读文档后,我不明白。

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 也会立即实例化。

【问题讨论】:

    标签: java spring lazy-initialization spring-bean post-processor


    【解决方案1】:

    问题的正确答案:“Spring 可以延迟初始化 Bean(Factory)PostProcessor 吗?”“NO”。我自己查了一下。我创建了 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-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 2019-01-24
      • 1970-01-01
      相关资源
      最近更新 更多