【问题标题】:XML based, component scanning or @Configuration bean based application context starts up is faster?基于 XML、组件扫描或基于 @Configuration bean 的应用程序上下文启动更快?
【发布时间】:2012-12-16 17:29:02
【问题描述】:

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

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

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

我打算做一个小型沙盒项目,如果我在这里几天都没有答案,看看哪个效果更好。

提前谢谢各位。 塔马斯

【问题讨论】:

    标签: xml performance spring configuration


    【解决方案1】:

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

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

    减少文本上下文的加载次数,您将获得更快的整体测试时间。如果出于某种原因,某些测试需要有个性化的启动,那么很好,将它们加载到自己的上下文中。

    【讨论】:

      【解决方案2】:

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

      我新建了一个项目(spring templates -> Simple Spring Utility Project)并稍作修改。

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

      1. 一个使用 ClassPathXmlApplicationContext 的测试用例获取包含 bean 定义的 XML 的位置。
      2. 一个使用 ClassPathXmlApplicationContext 的测试用例获取包含一行的 XML 的位置:
      3. 一个带有 AnnotationConfigApplicationContext 的测试用例,它获取一个包含配置 bean 的类(第一种情况下使用的 XML 的 java 等效项)。

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

      结果:

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多