Spring:没有@Lazy,是否可以延迟加载所有Spring Bean

时间:2017-12-29 21:24:50

标签: spring

在运行使用@ContextConfiguration的集成测试时,我希望延迟加载所有spring bean。理想情况下,我可以在一个地方应用这个延迟加载,并将它应用于通过@ContextConfiguration批注加载的任何bean。

1 个答案:

答案 0 :(得分:1)

是的。

您可以使用BeanDefinitionRegistryPostProcessor/BeanFactoryPostProcessor

执行此操作
@Configuration
static class LazyBeans implements BeanDefinitionRegistryPostProcessor {

    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry bdr) throws BeansException {
        for (String name : bdr.getBeanDefinitionNames()) {
            final BeanDefinition beanDefinition = bdr.getBeanDefinition(name);
            if (beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION) {
                beanDefinition.setLazyInit(true);
            }
        }
    }

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory clbf) throws BeansException {}
}
相关问题