- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我们有以下遗留的 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 的调用获得
将被完全初始化(但它不是 null 并且不会抛出异常)。MyClass
的实例()
那么,有没有更有效的方法呢?
最佳答案
首先,我建议打开日志记录并查看发生了什么。 Spring 通常很有帮助。
其次,context.getBeansOfType
和context.getBean
之间的一个区别是getBeansOfType
不查询父上下文。如果你有一个,你可能会在这里有所不同。
第三,我假设“驱动程序”bean 是延迟初始化的。初始化上下文时是否运行任何类型的多线程代码?已有reports与此相关的 2.5 周期后期的修复。 getBeansOfType
可能只是产生延迟或遇到内存障碍,因此隐藏了 getBean
返回未初始化 bean 的问题。
第四,您可能想要 - 只是为了争论 - 尝试使用 Spring 2.5.6 运行应用程序。如果它有效,你就知道有罪的一方。
关于java - 关于 AbstractApplicationContext.getBeansOfType() 和 getBean() 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/957769/
我的 Spring 类(class)有问题。我需要在配置类中获取一个类型的所有 Bean,以便将它们提供给另一个类。 现在的问题是,除非我启动一个ApplicationContext,否则我无法做到这
我正在尝试为我的一个 API 编写 Junit,在该 API 中我使用了 Map,如下所示: Map beansMap = ctx.getBeansOfType(clazz); 哪里 ctx = or
我们有以下遗留的 2.0.7 Spring 代码: final Map secondaryFactories = (Map) context.getBeansOfType(MyClass.c
我是一名优秀的程序员,十分优秀!