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"/>