自动装配的三种方式
- 一、xml方式自动装配
- 二、 按类型自动装配
- 三、使用注解
一、xml方式自动装配
byName: 会自动在容器上下文查找,和自己对象set方法后面的值对应的bean id(通过id匹配)
//实体类
@Data
public class Pepole {
private String name;
private Books books;
private Hobbies hobbies;
<bean id="books" class="com.lmy.pojo.Books"/>
<bean id="hobbies" class="com.lmy.pojo.Hobbies"/>
<bean id="pepole" class="com.lmy.pojo.Pepole" autowire="byName">
<property name="name" value="zhangSan"/>
</bean>
二、 按类型自动装配
byType:会自动在容器上下文中查找,和自己对象属性类型相同的bean(通过class匹配)
注意:使用autowire byType首先需要保证:同一类型的bean对象,在spring容器中唯一。如果不唯一,会报不唯一的异常。
<bean id="books" class="com.lmy.pojo.Books"/>
<bean id="hobbies" class="com.lmy.pojo.Hobbies"/>
<bean id="pepole" class="com.lmy.pojo.Pepole" autowire="byType">
<property name="name" value="zhangSan"/>
</bean>
三、使用注解
@Autowied装配方式
按类型装配(默认使用的装配方式)。
按名称装配(结合@Qualifier注解使用)。
public class Pepole {
private String name;
@Autowired
@Qualifier("books1")
private Books books;
@Autowired
private Hobbies hobbies;
}
<!--开启属性注解支持!-->
<context:annotation-config/>
<bean id="books2" class="com.lmy.pojo.Books"/>
<bean id="books1" class="com.lmy.pojo.Books"/>
<bean id="hobbies" class="com.lmy.pojo.Hobbies"/>
<bean id="pepole" class="com.lmy.pojo.Pepole"/>
@Resource装配方式
@Resource指定按type自动装配:
@Resource(type = Books.class)
private Books books;
@Resource指定按name自动装配:
@Resource(name = "books")
private Books books;
@Autowired与@Resource区别