Spring Core中@ComponentScan未设lazyInit时@Lazy Bean的加载规则
Spring Core中@Lazy注解与@ComponentScan全局懒加载的优先级问题
结论:不需要为@ComponentScan添加lazyInit=true,标注了@Lazy的Bean A依然会被懒加载。
Spring的懒加载配置遵循「局部注解优先于全局配置」的规则:
@ComponentScan的lazyInit参数是全局层面的默认规则,默认false意味着容器启动时会初始化所有未标记@Lazy的Bean。- 而直接标注在Bean类上的
@Lazy注解,是针对该Bean的个性化配置,它会覆盖全局的默认规则,强制让这个Bean延迟到第一次被依赖注入或主动获取时才完成初始化。
举个实际代码验证的例子:
// 标注@Lazy的Bean @Component("A") @Lazy public class BeanA { public BeanA() { System.out.println("BeanA 已初始化"); } } // 未设置lazyInit的配置类 @Configuration @ComponentScan(basePackages = "your.package.path") public class AppConfig { }
启动Spring容器时,控制台不会输出BeanA 已初始化;只有当你通过ApplicationContext.getBean("A")获取该Bean,或者有其他Bean依赖注入BeanA时,才会触发初始化并打印日志,这就证明BeanA是懒加载的。
内容的提问来源于stack exchange,提问作者Ragesh Rajendran
相关产品推荐
相关产品推荐

