如果我使用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"/>
...
现在使用demo
和xml
定义annotations
bean。初始化时,谁正在初始化bean
:annotation
或xml
。
答案 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定义而不是两个。