我们具有以下旧版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()
的调用很耗时。但是,即使我们忽略此调用的返回值,但是如果我们尝试消除此调用,那么MyClass
返回的getBean()
实例也不会完全初始化。 (因此,显然,对getBeansOfType()
的调用具有我们所需的某种副作用。)我们怀疑对
getBeansOfType()
的调用是过大的,我们可以做些更轻巧的操作,以便通过对MyClass
的调用获得的getBean()
实例将被完全初始化(但它不为null且不会引发异常)。那么,有没有更有效的方法呢?
最佳答案
首先,我建议打开日志记录,然后看看会发生什么。 Spring 通常是很有帮助的。
第二,context.getBeansOfType
和context.getBean
之间的区别是getBeansOfType
不查询父上下文。如果您有一个,那么这里可能会有所不同。
第三,我假设“驱动程序” bean是延迟初始化的。初始化上下文时,您是否正在运行任何类型的多线程代码?在与此相关的2.5周期后期,已修复了reports。 getBeansOfType
可能只是产生延迟或达到内存障碍,因此getBean
返回未初始化的bean的问题被隐藏了。
第四,出于参数的考虑,您可能希望尝试使用Spring 2.5.6运行该应用程序。如果可行,您知道有罪的一方。