基于XML,组件扫描或基于@Configuration bean的应用程序上下文启动速度更快?

时间:2012-12-16 17:29:02

标签: xml performance spring configuration

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

启动应用程序需要大约一到三秒,这或多或少都可以。但是,对于功能测试,我们启动它几百次。你可以猜到其余的......

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

我打算制作一个小型沙箱项目,以便在几天内没有得到答案时找出哪个性能更好。

先谢谢你们。 陶

2 个答案:

答案 0 :(得分:2)

不要担心哪个启动配置更快,而是查看测试工具可能更有效。

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

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

答案 1 :(得分:1)

最后我花了10分钟,然后在这个主题上做了一个小小的高峰。

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

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

  1. 一个使用ClassPathXmlApplicationContext的测试用例,它获取包含bean定义的XML的位置。
  2. 一个使用ClassPathXmlApplicationContext的测试用例,它获取包含一行的XML的位置:
  3. 使用AnnotationConfigApplicationContext的一个测试用例,它获取一个包含配置bean的类(在第一种情况下使用的Java等效于XML)。
  4. 每个测试用例创建了1000次应用程序上下文。

    结果:

    1. ~10s
    2. 〜10秒
    3. 〜6S
    4. 这意味着带有AnnotationConfigApplicationContext的@Configuration比其他两个快约40%。

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