1

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

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

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

我打算制作一个小型沙盒项目,以找出如果我在这里几天没有得到答复,哪个性能更好。

提前谢谢各位。塔马斯

4

2 回答 2

2

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

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

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

于 2012-12-16T23:42:07.580 回答
1

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

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

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

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

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

结果:

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

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

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

于 2012-12-17T09:55:38.653 回答