当前位置: 首页 > 知识库问答 >
问题:

Spring懒洋洋的实例化bean

陆正德
2023-03-14

我是Spring框架的新手,我知道Spring在启动时会实例化单例bean的默认行为,称为热切实例化。这是一个很好的行为,因为它只在启动时暴露bean实例化中的任何问题。但有时这种行为是不可预料的,因此通过向bean定义中添加lazy init=“true”,可以将实例化推迟到第一个请求。

<beans default-lazy-init="true">
<!-- no beans will be pre-instantiated... -->
</beans>

所以,我想知道我们可以使用什么样的场景来延迟实例化bean?。请举例说明。

共有2个答案

范成周
2023-03-14

通常,延迟加载总是朝着减少资源需求的方向发展@在我看来,乔瓦尼加快创业速度的例子,尤其是在频繁调动的情况下,是一个很好的例子。

需要注意的一点是,默认情况下,SpringBean是单例的,如果在高度并发的环境中使它们延迟加载,那么最终可能会出现问题,请注意来自的“延迟实例化:多线程应用程序中的危险”一节http://www.javaworld.com/article/2077568/learn-java/java-tip-67--lazy-instantiation.html

郎宏逸
2023-03-14

我想到的第一个场景是,如果有许多bean需要实例化,并且系统的启动时间应该很短(例如,某个web应用程序需要在不停止服务器的情况下重新部署)。通过延迟初始化,您可以在启动时实例化核心bean,而可以实例化不太重要或使用频率较低的后续bean。

 类似资料:
  • 在Spring中,可以将bean配置为懒洋洋地初始化。Spring批处理作业也是(Spring管理的)bean。也就是说,当我配置类似于

  • 我想在服务类和当前实现中的两个功能如下: > 获取父级时“children”应为null 获取父级时应填写“children”:

  • 我正在寻找一种方法来检索替代单声道,以防原始单声道是空的。我找到的最接近的是,但我的问题是,我无法将lambda表达式传递给它,因此即使Mono具有非空值,也会调用它。这有点像vs。 以下是一个示例:

  • 在我看来,这需要一种新类型的Spring ApplicationContext,它支持“热”刷新,但只是为了添加新的bean定义。先前存在的bean定义不会被移除/重新加载,也不会在随后的refresh()调用中由BeanFactoryPostProcessors重新处理,并且先前存在的单例不会被销毁! 这已经存在了吗?。有没有我忽略的更好的解决方案?

  • 我尝试用java-hibernate-spring实现一个服务器REST,它返回一个JSON。 我有一个多对多关系图。 我解释得更好,我有一个供应商,有一个配料列表,每种配料都有一个供应商列表。 我创建了这个表: 然后我有配料模型: 然后我有供应商模型: 服务 供应对象 和IdAbstractObject “无法写入JSON:未能懒洋洋地初始化Role:myPackage.Comprigue.Co

  • 当我试图懒洋洋地读取子实体列表时,我(断断续续地)得到了这个错误。 关于这个错误,我已经浏览了一个关于SO的帖子列表。我所能找到的就是执行EAGER fetch或使用属性。我不想做任何一个,因为他们是反模式。 我使用的是spring-data-jpa。这是一个spring-boot项目。请求来自web层(Rest控制器)