如何在Spring Boot中设置lazy init的默认行为?

时间:2016-10-27 08:20:03

标签: spring spring-boot lazy-initialization

我正在处理我的第一个 Spring Boot 应用程序,我遇到了以下问题。

我想设置默认情况下所有bean都是延迟加载的。我知道我可以将@Lazy添加到我的所有@Component bean中,但我希望默认情况下所有bean都设置为惰性...

Spring Boot 中,我没有XML配置文件或配置类,但我只有application.properties配置文件。

那么,我怎样才能设置所有bean的默认行为是lazy = true

2 个答案:

答案 0 :(得分:0)

要实现一个BeanFactoryPostProcessor并在默认情况下设置延迟初始化(如果您正在@Configuration类之外动态地定义一些Bean,则可能需要使用以下方法)为我工作:

@Component
public class LazyBeansFactoryPostProcessor implements BeanFactoryPostProcessor {

    @Override
    public void postProcessBeanFactory( ConfigurableListableBeanFactory beanFactory ) throws BeansException {
        for ( String name : beanFactory.getBeanDefinitionNames() ) {
            beanFactory.getBeanDefinition( name ).setLazyInit( true );
        }
    }
}

这实际上将@Lazy注释放在您的所有@Component@Service上。如果您采用这种方式,您可能想发明一种用@Eager注释类的机制,或者只是硬性连接上面LazyBeansFactoryPostProcessor中的列表。

进一步阅读

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/config/BeanFactoryPostProcessor.html

答案 1 :(得分:0)

自2.2.2.RELEASE版本的spring-boot以来,您可以在application.properties文件中使用以下属性

spring.main.lazy-initialization=true

有关进一步的阅读和示例,请参阅

https://www.baeldung.com/spring-boot-lazy-initialization
https://spring.io/blog/2019/03/14/lazy-initialization-in-spring-boot-2-2