gpt4 book ai didi

java - 关于 AbstractApplicationContext.getBeansOfType() 和 getBean() 的问题

转载 作者:搜寻专家 更新时间:2023-11-01 00:53:48 41 4
gpt4 key购买 nike

我们有以下遗留的 2.0.7 Spring 代码:

final Map<String, MyClass> secondaryFactories
= (Map<String, MyClass>) context.getBeansOfType(MyClass.class,
false, true);

return (MyClass) context.getBean("myClass");

其中 context

的一个实例
org.springframework.context.support.AbstractApplicationContext

请注意,我们忽略了 getBeansOfType() 的返回值。这工作得很好,但问题是对 getBeansOfType() 的调用很耗时。然而,即使我们忽略了这个调用的返回值,如果我们试图消除这个调用,那么 getBean() 返回的 MyClass 的实例就没有完全初始化。 (因此,显然,对 getBeansOfType() 的调用产生了我们需要的某种副作用。)

我们怀疑对 getBeansOfType() 的调用是过度的,我们可以做一些更轻量级的事情,以便通过对 getBean 的调用获得 MyClass 的实例() 将被完全初始化(但它不是 null 并且不会抛出异常)。

那么,有没有更有效的方法呢?

最佳答案

首先,我建议打开日志记录并查看发生了什么。 Spring 通常很有帮助。

其次,context.getBeansOfTypecontext.getBean 之间的一个区别是getBeansOfType 不查询父上下文。如果你有一个,你可能会在这里有所不同。

第三,我假设“驱动程序”bean 是延迟初始化的。初始化上下文时是否运行任何类型的多线程代码?已有reports与此相关的 2.5 周期后期的修复。 getBeansOfType 可能只是产生延迟或遇到内存障碍,因此隐藏了 getBean 返回未初始化 bean 的问题。

第四,您可能想要 - 只是为了争论 - 尝试使用 Spring 2.5.6 运行应用程序。如果它有效,你就知道有罪的一方。

关于java - 关于 AbstractApplicationContext.getBeansOfType() 和 getBean() 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/957769/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com