首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring初始化顺序

Spring初始化顺序
EN

Stack Overflow用户
提问于 2008-10-14 16:29:50
回答 2查看 7.2K关注 0票数 2

假设我有几个spring bean:

代码语言:javascript
运行
复制
<beans>
   <bean name="A" ... />
   <bean name="B" ... />
</beans>

"B“公开了一个不需要"A”的远程服务。假设"A“花了不可忽略的时间来加载。这意味着在重新启动周期中,应用程序挂起远程客户端,该客户端实际上可以连接到服务器,但会等待响应,直到spring容器完全初始化。

我希望能够做的是让"B“远程服务立即响应,即使(基于应用程序状态)它只能返回NOT_READY或类似的内容。然而,即使您将bean指定为lazy-init并且与加载顺序无关,容器也会强制等待,直到它的所有bean都被初始化。

我怀疑让"B“立即可用意味着spring必须提供一个部分初始化的容器,这听起来很糟糕。但是,我非常感谢任何人得到的关于初始化顺序的任何信息,以及您是否找到了任何合理的解决方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-10-16 20:24:23

不要直接引用bean "A“。相反,引用一个bean,它是bean "A“的工厂;通过这种方式,可以创建工厂bean,而不需要为实例化”A“而进行初始化。当然,您需要重构引用"A“的类,以便首先检索"A”。

或者,您可以创建一个bean "AA",它是bean "A“的容器,它具有初始化状态,并公开bean "A”的接口;在调用时,它将其初始化状态设置为not initialized,并开始在某个线程中初始化bean "A";然后,对"AA“上的"A”的任何接口方法的调用都可以阻塞或返回not ready响应,直到"AA“中的"A”的初始化完成。

这在某种程度上取决于你对“花费不可忽略的时间来加载”的定义。为什么要花费不可忽略的时间来加载?在A中有没有一些特别棘手的初始化?或者,A是如此巨大,以至于会扼杀JVM吗?

票数 4
EN

Stack Overflow用户

发布于 2008-10-14 19:56:41

我不明白,为什么"A花了不可忽略的时间来加载“,但也许你可以通过重构A来懒惰地初始化自己。不要使用InitializingBean或处理ApplicationEvent。只需在要处理的第一个请求上进行初始化。这会减慢第一个请求的速度!

另一种可能是将初始化移动到由处理ApplicationEvent的bean创建的单独线程。线程以异步方式调用bean的初始化方法。小心处理对未初始化bean的请求!

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

https://stackoverflow.com/questions/201888

复制
相关文章

相似问题

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