实现具有单例范围的bean

时间:2017-03-26 11:05:22

标签: java spring singleton

当下面的豆子会被实施时?

<bean id="a" class="Someclass" lazy-init="true" scope="singleton"/>

Spring是否会忽略&#34; lazy-init&#34;在这种情况下属性(因为我们使用单例范围)?

加载bean定义时,将创建一个新实例。有人可以确认吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

<bean id="a" class="Someclass" lazy-init="true" scope="singleton"/>

和这个

<bean id="a" class="Someclass" lazy-init="true"/>

是一样的。 spring bean的默认范围是singleton。所以它肯定不会忽略这个属性。

lazy-init="true"将不会在启动时创建您的bean。只有在请求时才会创建您的bean。

答案 1 :(得分:0)

  

在这种情况下,Spring是否会忽略“lazy-init”属性(因为我们   使用单例范围)?

不,它不会忽略,只有在第一次访问对象时才会创建对象,而不是在容器启动期间创建对象。

  

当bean定义为时,将创建一个新实例   加载。任何人都可以确认吗?

不,只有在实际需要bean时才会创建实例。

你可以在here的春季文档中引用相同的点,下面是文本(强调我的)

  

延迟初始化的bean告诉IoC容器创建一个bean   实例首次请求时,而不是在启动时但是,当一个延迟初始化的bean是一个非延迟初始化的单例bean的依赖项时,ApplicationContext会在启动时创建一个延迟初始化的bean ,因为它必须满足单例的依赖关系。惰性初始化的bean被注入到其他地方没有延迟初始化的单例bean中。