Spring自动装配仅适用于接口


问题内容

我对Spring框架很陌生,遇到了以下问题。

我有一个接口ClassA,由class ClassA1和实现ClassA2

我将以下bean定义添加到 applicationContext.xml

<bean id="class1" class="com.abc.ClassA1" />
<bean id="class2" class="com.abc.ClassA2" />

我想自动连接以下两个实现类。

@Autowired
private ClassA1 classA1;

@Autowired
private ClassA2 classA2;

上面的代码抛出错误为

无法自动写入字段:com.abc.ClassA1 com.abc.SomeClass.classA1;
嵌套的异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有匹配类型[com.abc.ClassA1]的bean

但是,如果我将自动装配更改为界面,如下所示:

@Autowired
ClassA classA1;

然后将ClassA1自动连接到变量。我不知道如何将变量自动连接到ClassA2。


问题答案:

我尝试了多种方法来解决此问题,但是我可以通过以下方式使其工作。

@Autowired
private ClassA classA1;

@Autowired
private ClassA classA2;

在应用程序上下文中,我如下定义了bean:

<bean id="classA1" class="com.abc.ClassA1" autowire="byName" />
<bean id="classA2" class="com.abc.ClassA2" autowire="byName" />