Spring 使用@Lazy时Bean创建和初始化之间的区别

Spring 使用@Lazy时Bean创建和初始化之间的区别,spring,Spring,SpringIOC在启动时创建并初始化bean。bean的创建和初始化之间的区别是什么 在使用@Lazy时,据说用@Lazy注释的bean将被惰性地实例化。这是否意味着该bean将在ApplicationContext启动时被创建[像其他没有用@Lazy注释的bean一样],并在第一次引用时初始化?@Lazy 指示是否延迟初始化bean。 可用于直接或间接用@Component注释的任何类或用@Bean注释的方法 如果@Component或@Bean定义中不存在此注释,则将发生紧急初始化。如果存

SpringIOC在启动时创建并初始化bean。bean的创建和初始化之间的区别是什么

在使用@Lazy时,据说用@Lazy注释的bean将被惰性地实例化。这是否意味着该bean将在ApplicationContext启动时被创建[像其他没有用@Lazy注释的bean一样],并在第一次引用时初始化?

@Lazy

指示是否延迟初始化bean。 可用于直接或间接用@Component注释的任何类或用@Bean注释的方法

如果@Component或@Bean定义中不存在此注释,则将发生紧急初始化。如果存在并设置为true,@Bean或@Component将不会被初始化,直到被另一个Bean引用或从封闭的BeanFactory显式检索。如果存在并设置为false,则bean将在启动时由执行单例急切初始化的bean工厂实例化

如果@Configuration类上存在Lazy,则表示该@Configuration中的所有@Bean方法都应该被延迟初始化。如果@Lazy在@Lazy注释的@Configuration类中的@Bean方法上存在且为false,则表示重写了“默认的Lazy”行为,并且应该急切地初始化Bean


除了用于组件初始化外,此注释还可以放置在标记为Autowired或Inject的注入点上:在这种情况下,它会为所有受影响的依赖项创建一个延迟解析代理,作为使用ObjectFactory或Provider的替代方法。

我最近回答了一个类似的问题。你可以看看它是否有用