我有一个与Spring注释相关的问题。在我的(学习)项目中,我定义了两个类,另一个类有两个属性,每个属性都是其中的一个。 为了生成错误,我在XML中定义了两个相同类类型的bean,并且我在setter方法中使用了@Autowired注释。事情是这样的:Spring名称注释
<bean id="classA" class="beans.ClassA"></bean>
<bean id="otherclassA" class="beans.ClassA"></bean>
<bean id="classB" class="beans.ClassB"></bean>
public class UpperClass{
private ClassA classA;
private ClassB classB;
@Autowired
public void setClassA(ClassA classA){this.classA = classA}
@Autowired
public void setClassB(ClassB classB){this.classB = classB}
/* .
.
.
*/
}
在主类中,我得到的ApplicationContext这个bean的实例,并打印属性重写toString方法,一个简单的测试内容。 我读过Spring Autowired注释按类型查找bean,所以测试应该失败,因为定义了两个ClassA类的bean,但是它起作用。 它也可以使用@Resource注释而不使用任何名称。
我正在使用Spring版本4. 我已经将bean的id更改为与类/ setters名称不匹配,并且如预期的那样失败。
谁能告诉我为什么,或者我做错了什么? 如果Spring无法通过类型找到bean,Spring是否正在寻找byName?
尝试更改xml中第一个bean的id并查看会发生什么。 – Jason
我已经看到,如果更改类而不是bean ID,则必须更改setter参数的名称以获取错误,您还必须更改setter方法名称以使其与bean id不匹配。 – jgonzal