User类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
private String name;
private Department department;
private Department department1;
}
Department类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Department {
private int dept_id;
private String dept_name;
}
1、构造器注入。
<bean id="user" class="com.xycf.spring.ioc.User">
<constructor-arg name="id" value="1"/>
<constructor-arg name="name" value="abc"/>
<constructor-arg name="department" ref="department"/>
<constructor-arg name="department1" ref="department"/>
</bean>
<bean id="department" class="com.xycf.spring.ioc.Department"/>
对于组合关系的成员属性,通过ref注入值。如上述代码中,department和department1都是Department类型的数据。因此需要注入Department的bean后再通过Department的bean id为User类的department成员属性赋值。
2、基于set方式注入
<bean id="user" class="com.xycf.spring.ioc.User">
<property name="id" value="1"/>
<property name="name" value="aaa"/>
<property name="department" ref="department"/>
<property name="department1" ref="department"/>
</bean>
<bean id="department" class="com.xycf.spring.ioc.Department"/>
与构造器注入基本相同。除了标签名有差别。
3、自动注入
<bean id="user" class="com.xycf.spring.ioc.User" autowire="byName"></bean>
<bean id="department" class="com.xycf.spring.ioc.Department"></bean>
如果没有写autowire,spring不会给department属性初始化。而是赋值为null。
autowire=“byName”是通过id=“department”来寻找成员属性名中与它相同的成员属性,然后自动注入。因此,department属性有值,department1属性没有。
autowire=“byType”是通过类型来注入值。因此只要Department这个类被注入到了spring容器中,那么department和department1成员属性都有值。