基于XML、组件扫描或基于@Configurationbean的应用程序上下文启动更快



我在一个应用程序中工作,在该应用程序中,我们混合使用XML和组件扫描来定义如何将依赖关系连接在一起。

启动应用程序大约需要一到三秒,这或多或少是可以的。然而,对于功能测试,我们会启动它几百次。你可以猜到剩下的…

我想知道是否有任何可用的性能比较,可以在启动性能方面比较基于XML、组件扫描和基于@configuration bean的spring应用程序上下文。

我计划做一个小沙盒项目,看看如果我在这里几天没有得到答案,哪一个表现更好。

提前感谢各位。Tamás

与其担心哪种启动配置更快,不如看看你的测试工具。

如果功能测试都可以在同一个Spring配置中运行,那么为什么不只加载一次呢?该文档讨论了这个特定问题:http://static.springsource.org/spring/docs/current/spring-framework-reference/html/testing.html#testing-ctx管理

减少加载文本上下文的次数,您将获得更快的总体测试时间。如果有些测试需要个性化的创业公司是有原因的,那么好吧,在他们自己的环境中加载它们。

最后,我花了10分钟,在这个话题上做了一个小高潮。

我创建了一个新项目(spring-templates->SimplespringUtilityProject),并对其进行了一些修改。

在测试包中,我添加了三个测试用例。

  1. 一个带有ClassPathXmlApplicationContext的测试用例,它获取包含bean定义的XML的位置
  2. 一个带有ClassPathXmlApplicationContext的测试用例,它获取包含一行的XML的位置:
  3. 一个带有AnnotationConfigApplicationContext的测试用例,它得到一个包含配置bean的类(第一个用例中使用的java等价于XML)

每个测试用例创建应用程序上下文1000次。

结果:

  1. ~10s
  2. ~10s
  3. ~6s

这意味着使用AnnotationConfigApplicationContext的@Configuration比其他两个快40%左右。

我需要注意的是,我认为这个测量在任何方面都不准确。依赖层次结构太简单了(只有一个bean),但我仍然认为AnnotationConfigApplicationContext是三个中最快的解决方案。

最新更新