哪个有更多优先级:Spring注释或xml配置

时间:2013-08-14 05:18:08

标签: xml spring annotations

如果我使用spring bean配置和xml定义annotation。然后在具有更高优先级的初始化时xmlannotations

就像我的豆子......

package com.abc;    

@Component
Class Demo{
    ...
}

我的xml配置是......

...
<context:annotation-config />
<context:component-scan base-package="com.abc" />

<bean id="demo" class="com.abc.Demo"/>
...

现在使用demoxml定义annotations bean。初始化时,谁正在初始化beanannotationxml

5 个答案:

答案 0 :(得分:3)

在您的示例中,@ Component创建的bean的默认名称是“demo”,与您的XML匹配,因此只会创建一个bean - 由XML创建的实例。

如果XML指定了不同的名称(或@Component注释给出了不同的名称),则会创建两个实例。

答案 1 :(得分:2)

注释注入在XML注入之前执行。因此,对于通过两种方法连接的属性,后一种配置将覆盖前者。

答案 2 :(得分:1)

根据this posting,您不能将“组件扫描”和基于XML的连线组合到同一个类中。它似乎说你最终将实例化bean两次。

答案 3 :(得分:0)

如果你在xml和使用注释中声明bean,这会导致容器读取bean的配方两次。 如果生成的xml bean名称与注释的不同,则会导致创建具有不同名称的2个bean! 更糟糕的是,如果配方不同,他们的行为可能会有所不同,f.ex。你只声明@Scope(“会话”) 使用注释只有一个bean是会话作用域而另一个是单例

答案 4 :(得分:0)

注释注入在XML注入之前执行,因此后一种配置将覆盖前两种方法连接的属性。

换句话说,XML配置的优先级高于注释配置。

并且,这并不意味着您丢失了所有注释功能,例如@Repository定义的未经检查的异常支持或使用@Transactional时的事务支持。

所有注释仍然存在,并且它们得到了正确支持。唯一的区别是你最终得到一个bean定义而不是两个。