如何为所有spring bean激活lazy instantiation

时间:2015-05-13 10:36:48

标签: spring

在项目中有几个applicationContext.xml文件。对于已定义的bean,没有任何惰性定义。然后所有单例作用域bean在运行时实例化 哎呀。它对于开发阶段来说非常糟糕。接近2分钟需要时间服务器启动。现在我知道有没有任何解决方案在春天有效的懒惰实例化。例如,web.xml中的配置设置bean default-lazy-init =" true"。

2 个答案:

答案 0 :(得分:4)

实现一个将lazy设置为true的自定义BeanFactoryPostProcessor,例如:

public class BeanFactoryPostProcessorImpl implements BeanFactoryPostProcessor {

    @Override
    public void postProcessBeanFactory(final ConfigurableListableBeanFactory beanFactory) throws BeansException {

        for (String beanName : beanFactory.getBeanDefinitionNames()) {
            beanFactory.getBeanDefinition(beanName).setLazyInit(true);  
        }
    }
}

要使其正常工作,您需要做的就是将其作为标准bean添加到您的应用程序上下文中:

  

ApplicationContext将检测部署到其中的任何bean   它实现了BeanFactoryPostProcessor接口,以及   自动将它们用作bean工厂的后处理器,在   适当的时候。除了部署之外,没有其他任何事情需要做   这些后处理器的方式与任何其他bean类似。

答案 1 :(得分:0)

applicationContext.xml个文件中,您可以在default-lazy-init元素上添加值true的{​​{1}}属性。请参阅reference