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

时间:2019-01-01 17:17:24

标签: spring

Spring IOC在启动时创建并初始化bean。 Bean的创建和初始化之间有什么区别?

使用@Lazy时,据说用@Lazy注释的bean将被延迟实例化。这是否意味着将在ApplicationContext上创建该bean(就像其他未使用@Lazy注释的其他bean一样)启动并在首次引用时进行初始化?

1 个答案:

答案 0 :(得分:-1)

@Lazy

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

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

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

除了其在组件初始化中的作用之外,还可以将该注释放置在标记有自动装配或注入的注入点上:在这种情况下,它会为所有受影响的依赖项创建一个惰性解析代理,作为替代方案使用ObjectFactory或Provider。