【发布时间】:2017-03-26 11:05:22
【问题描述】:
下面的bean什么时候会被实例化?
<bean id="a" class="Someclass" lazy-init="true" scope="singleton"/>
在这种情况下,Spring 是否忽略“lazy-init”属性(因为我们使用单例范围)?
加载 bean 定义时将创建一次新实例。有人可以确认吗?
谢谢。
【问题讨论】:
下面的bean什么时候会被实例化?
<bean id="a" class="Someclass" lazy-init="true" scope="singleton"/>
在这种情况下,Spring 是否忽略“lazy-init”属性(因为我们使用单例范围)?
加载 bean 定义时将创建一次新实例。有人可以确认吗?
谢谢。
【问题讨论】:
这个
<bean id="a" class="Someclass" lazy-init="true" scope="singleton"/>
还有这个
<bean id="a" class="Someclass" lazy-init="true"/>
都是一样的。 spring bean 的默认作用域是单例。所以它绝对不会忽略这个属性。
lazy-init="true" 不会在启动时创建您的 bean。只有在请求时才会创建您的 bean。
【讨论】:
在这种情况下 Spring 是否会忽略“lazy-init”属性(因为我们 使用单例范围)?
不,它不会忽略,对象只会在第一次访问时创建,而不是在容器启动时创建。
当 bean 定义完成时,将创建一个新实例 加载。有人可以确认吗?
不,只有在实际需要 bean 时才会创建实例。
您可以从here 参考 spring doc 中的同一点,下面是文本(强调我的)
一个惰性初始化的 bean 告诉 IoC 容器创建一个 bean 实例在第一次请求时,而不是在启动时。 但是,当延迟初始化的 bean 是未延迟初始化的单例 bean 的依赖项时,ApplicationContext 会在启动时创建延迟初始化的 bean,因为它必须满足单例的依赖项。延迟初始化的 bean 被注入到其他未延迟初始化的单例 bean 中。
【讨论】: