2011-04-13 72 views
6

我们的Spring配置包含大约1200个bean,我们使用component-scan/@ Autowired。如果我们将ApplicationContext作为Xml导出(并仍然使用@Autowired),我们在上下文启动时节省了大约10%。spring javaconfig,xml config和annotations之间的性能差异

如果我们尝试使用spring javaconfig,我们可以期待什么?

+0

只因为我感兴趣的是:多长时间的启动需要1200豆? – Ralph 2011-04-13 08:02:30

+1

在我的机器上10秒钟,这是一个嘲弄的版本(没有所有重的东西) – krosenvold 2011-04-13 08:43:32

+0

感谢您的信息 – Ralph 2011-04-13 09:33:26

回答

2

我估计会少一点,因为没有解析会发生(使用反射,xml解析'注释'和xml解析器)。

但是,这不应该是选择其中一个配置选项的理由。启动时间对性能并不重要。

+5

作为一名开发人员,启动时间对我来说很重要,所以对我来说这是他们所有人中最重要的性能方面;) – krosenvold 2011-04-13 08:45:29

+1

@krosenvold如果您在每次更改时重新部署..是的,但不应该这样做 – Bozho 2011-04-13 08:56:28

+0

重新部署vs使用类似jrebel的东西并不总是像你想的那样清楚,特别是如果你的容器启动已经非常快。还有像集成测试这样的东西。 – krosenvold 2011-04-13 09:38:12

4

注解和XML之间的区别可能不大,但相反,它会成为使用组件扫描的启动性能下降,其中慢。如果您将组件扫描添加到您的XML版本中,则应该发现它同样缓慢。

+0

10%的差异基本上是我们得到的,因为我们在使用xml时禁用了组件扫描(如果我忽略了xml的实际加载时间,我认为它会是100-200ms之类的东西)。 – krosenvold 2011-04-13 08:40:38

+0

也有类型的广泛的自动装配相关的成本,但我们并没有删除,因为我们使用xml +自动装配(只是使用小循环从运行的上下文中导出简单的“bean”声明) – krosenvold 2011-04-13 08:42:05

+0

@krosenvold:我目前最喜欢的方法(下周可能会再次发生变化)是在Bean类本身中使用'@ Bean'以及构造函数注入。没有自动装配。它使得我的依赖更容易遵循,而构造函数比XML更可用。 – skaffman 2011-04-13 09:02:01

2

我其实已经尝试过这一段时间,并且令人沮丧的是它不是更快..或者至少不能更快地感知。在某些情况下,我实际测量的速度比较慢(非常小)。我希望我有号码,但这是为了我自己的利益而进行的快速测试之一。我也没有1200豆,但约200.

我也注意到混合XML和Java配置给了最差的表现(曾经如此轻微)。

我发现是我的Spring启动时间的瓶颈是Hibernate。我正在做另一个项目,使用JDBC使用Hibernate的相同配置,启动时间约为1/3。

3

我做了一个天真的基准,使用XML,注释和Java配置。结果令人惊讶(Java配置较慢)。我不知道这是否是您的情况相关,基准是它们是什么...

http://www.jroller.com/kenwdelong/entry/is_spring_javaconfig_faster

+0

Javaconfig是唯一需要使用cglib生成代码的spring配置风格,这就是它比xml稍慢的原因; cglib的初始成本相当高。 – krosenvold 2014-01-02 08:20:04

相关问题