我正在处理我的第一个 Spring Boot 应用程序,我遇到了以下问题。
我想设置默认情况下所有bean都是延迟加载的。我知道我可以将@Lazy
添加到我的所有@Component
bean中,但我希望默认情况下所有bean都设置为惰性...
在 Spring Boot 中,我没有XML配置文件或配置类,但我只有application.properties
配置文件。
那么,我怎样才能设置所有bean的默认行为是lazy = true
答案 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
中的列表。
答案 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