首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >出于性能原因,是否可以替代Spring的@Configurable?

出于性能原因,是否可以替代Spring的@Configurable?
EN

Stack Overflow用户
提问于 2013-03-29 21:20:01
回答 1查看 822关注 0票数 0

我在一段必须高性能的代码中为非托管spring实例使用了@Configurable。我们在new运算符中使用了大量的非托管bean,并且在我们的概要分析中,我们注意到@Configurable注解的使用大大降低了速度。

对于这一特定部分,我们希望有一种更快的方法从上下文中提取bean(只需直接使用applicationContext.getBean())。我知道我们放弃了IoC这样做,但这是一个特殊的情况,不是一个正常的模式。

我们使用CTW进行编织,但我想知道spring在幕后使用了什么机制来获取应用程序上下文,这样我们就可以简单地获取它并使用getBean?静态应用程序上下文?它是否存储在某个地方的threadlocal中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-29 21:52:42

Aspects是由AspectJ管理的单例。当您将一个方面放入Spring配置文件中时,Spring实际上并没有创建这个方面。相反,它使用aspectOf()获取对方面的引用。

这意味着(在编译时,当你编织时)你的@可配置注解被挂接到单例AnnotationBeanConfigurerAspect中。然后,当您加载应用程序上下文时,Spring将获得对相同单例方面的引用,并对该方面调用setBeanFactory()方法(因为它实现了BeanFactoryAware)。

当然,这种魔法可能会带来麻烦。如果您有两个应用程序上下文,那么第二个上下文将覆盖第一个上下文的配置,这可能会非常混乱。

为了直接回答您的问题,这意味着您所要做的就是创建一个实现BeanFactoryAware的新方面(这里是AnnotationBeanConfigurerAspect的代码,您可以将其用作示例),然后在spring配置文件中“实例化”相同的方面,您的方面现在将可以访问bean工厂。

如果你追求的是性能,那么请注意,上面的方法并不比创建一个对BeanFactory的静态引用并在你启动应用程序时实例化它干净多少,所以你最好还是做静态引用,因为它更简单。

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

https://stackoverflow.com/questions/15704094

复制
相关文章

相似问题

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