可以的,而且在 Spring Boot 的测试环境里全局开启 lazy-init 还挺常见,主要是为了让测试启动更快,只初始化真正会被用到的 Bean。
下面分两部分说:
从 Spring Boot 2.2 开始,可以通过配置属性全局开启 lazy-init:
# application.yml 或 application-test.yml
spring:
main:
lazy-initialization: true
或 properties:
spring.main.lazy-initialization=true
只要这个配置生效,所有通过 Spring 管理的 bean(包括 @Component、@Service、@Repository、@Configuration/@Bean 等)默认都会改为懒加载,除非你在某个 bean 上显式关闭(例如 @Lazy(false))。
常见几种方式:
比如你有:
@SpringBootTest
class SomeTest {
// ...
}
那就可以在 src/test/resources 下建一个 application-test.yml:
spring:
main:
lazy-initialization: true
然后把 profile 切到 test:
@SpringBootTest
@ActiveProfiles("test")
class SomeTest {
}
这样 只在测试环境里启用 lazy-init,不会影响正式环境。