首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何懒散地注册Spring 'bean定义‘,以提高启动时间?

我如何懒散地注册Spring 'bean定义‘,以提高启动时间?
EN

Stack Overflow用户
提问于 2014-02-20 04:00:12
回答 1查看 476关注 0票数 6

我们的Java应用程序加载了超过1000个插件,这些插件都是我们使用ApplicationContext#registerBeanDefinition()方法注册为Spring的。这些bean通常还有其他依赖项,我们也使用相同的方法将其注册为spring (包括我们的核心应用程序代码),总共大约有7,000个Spring definitions...not。

问题是启动时间很长(仅加载插件bean定义的时间约为6.5分钟)。当我们的应用程序使用已经注册了bean定义的插件来处理其他请求时,我们更愿意将这个加载时间扩展到更长的时间。大多数插件很少使用。因此,我们确实希望懒洋洋地注册我们的bean定义(-这与我们今天已经在上做的单例bean的懒惰-init不同)。但是,对于任何支持‘热’刷新()调用的现有Spring ApplicationContext (如Spring文档所指的那样),这似乎都很昂贵。

支持“热”刷新的Spring ApplicationContext类从销毁所有单例bean开始。我们的大多数插件都是单个插件,所以每次调用refresh()都会导致大多数插件被销毁,然后是recreated...costly。如果我们不调用refresh,那么我们新加载的插件bean将不会被后处理(例如AOP等.)。

我们可以保证,当我们被迫加载另一个插件时,我们还将加载任何尚未加载的依赖项。因此,在加载的bean定义无效的情况下,我们永远不会执行。

在我看来,这需要一种支持“热”刷新的新型Spring,但只用于添加新的ApplicationContext定义。先前存在的bean定义不会被删除/重新加载,也不会被BeanFactoryPostProcessors在随后的refresh()调用中重新处理,而预先存在的单例也不会被销毁!

这个问题已经存在了吗?有没有更好的解决办法我忽略了?

EN

回答 1

Stack Overflow用户

发布于 2014-02-20 06:08:54

这听起来像是你在找@Lazy

4.4.4延迟初始化bean

延迟初始化的bean告诉IoC容器在第一次请求时创建bean实例,而不是在启动时。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21897827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档