【发布时间】:2013-03-29 13:20:00
【问题描述】:
我在一段必须高性能的代码中为非托管 spring 实例使用 @Configurable bean。我们在 new 运算符中使用了很多非托管 bean,在我们的分析中我们注意到 @Configurable 注解的使用大大降低了速度。
对于这个特定的部分,我们想要一种更快的从上下文中提取 bean 的方法(只是一个直接的 applicationContext.getBean())。我知道我们放弃了 IoC 这样做,但这是一种特殊情况,而不是正常模式。
我们使用 CTW 进行编织,但我想知道 spring 在幕后使用什么机制来获取应用程序上下文,以便我们可以简单地抓取它并使用 getBean?静态应用程序上下文?它是否存储在 threadlocal 的某个地方?
【问题讨论】:
-
这个问题对我来说没有多大意义。 Spring 文档描述了 @Configurable 是如何实现的(参见 3.1 参考的第 8.8.1 节),它们还描述了如何访问应用程序上下文。但是,真的,您认为
getBean()会让您的生活更轻松吗?如果您准确描述您使用@Configurable 做什么,您的问题会更好(并且更有可能得到有用的答案),因为可能有更好的解决方案。 -
看看 Apache Wicket 模块 wicket-ioc 是如何处理依赖注入的。他们的方法非常适用于非托管 bean,并且出于性能原因结合了缓存机制。我已经创建了他们模块的独立版本,因此它可以在任何地方用作@Configurable 替代方案 - github.com/sabomichal/spring-injector
标签: java spring configurable aspect