3

如果我spring bean使用xml配置和annotation. 然后在初始化时,优先级更高,xml或者annotations.

就像我的豆子...

package com.abc;    

@Component
Class Demo{
    ...
}

而我的xml配置是...

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

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

现在demobean 是使用xml和定义的annotations。初始化时,谁在初始化bean:annotationxml.

4

5 回答 5

4

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

于 2017-08-10T07:45:42.960 回答
3

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

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

于 2013-08-14T05:43:07.757 回答
1

根据此贴文,您不能将“组件扫描”和基于 XML 的布线组合用于相同的类。似乎说您最终将实例化 bean 两次。

于 2013-08-14T05:37:05.293 回答
1

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

换句话说,XML 配置比注解配置具有更高的优先级。

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

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

于 2017-11-08T03:53:19.920 回答
0

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

于 2015-07-06T09:45:48.620 回答