autowire 可以让Ioc自己去寻找要填入的值,我们只需要提供 所依赖类的set类即可。

<bean name="student" class="com.test.bean.Student" autowire="byType"/>

有两个参数:

  • byName:按照变量名查找
  • byType:按照类型查找
  • constructor:对使用构造方法完成的依赖注入(默认也是按byType)

自动装配的歧义问题

<bean name="student" class="com.test.bean.Student" autowrite="byType"/>

此时如果有两个 teacher 的实现类,那么bean就不知道要用那个实现类来实现 teacher 依赖。

我们需要修改这两个 teacher 实现类的bean,通过添加 autowire-candidate 属性可以排除在自动装配选择中,也可以使用 primary 来让首先选择该bean。

<bean name="teacher" class="com.test.bean.ArtTeacher" primary="true"/>
<bean name="teacher2" class="com.test.bean.ProgramTeacher"/>
<bean name="student" class="com.test.bean.Student" autowire="byType"/>
<bean name="teacher" class="com.test.bean.ArtTeacher"/>
<bean name="teacher2" class="com.test.bean.ProgramTeacher" autowire-candidate="false"/>
<bean name="student" class="com.test.bean.Student" autowire="byType"/>