跟着视频敲代码,类名对象名属性名都一样,有点小乱。对几个名称微调后测试,做个小总结。
常用的属性注入方式有四种:
- 构造方法方式属性注入;
- set方法方式属性注入;
- P名称空间的属性注入;
- SpEL的属性注入;
1、构造方法方式属性注入(常用为注入普通类型的属性注入,对象类型的属性注入与set方法注入对象类型的属性相似)
<!-- 构造方法的方式 -->
<bean id="car" class="com.itheima.spring.demo4.Car">
<constructor-arg name="name" value="宝马"/>
<constructor-arg name="price" value="800000"/>
</bean>
2、set方法方式属性注入
①set方法注入普通类型的属性
<bean id="car2" class="com.itheima.spring.demo4.Car2">
<property name="name" value="奔驰"/>
<property name="price" value="1000000"/>
</bean>
②set方法注入对象类型的属性
<bean id="employee" class="com.itheima.spring.demo4.Employee">
<!-- value:设置普通类型的值,ref:设置其他类型的id或name -->
<property name="name" value="涛哥"/>
<property name="car2" ref="car"/> <!-- 将id="car"对应的类中的属性赋予Car类型的car2(与创建的时候对应) -->
</bean>
前方高能请注意!
1、value:设置普通类型的值,ref:设置其他类型的id或name。
2、ref中的属性对应的类名(id为car对应的类名)需要和自己使用的类中(对象类型的)变量的类型相同。for example:public class Employee {
private String name;
private Car car2; //这里创建的是Car类型的对象car2,得与上方的配置分别对应
public void setName(String name) {
this.name = name;
}
public void setCar2(Car car2) {
this.car2 = car2;
}
@Override
public String toString() {
return "Employee [name=" + name + ", car2=" + car2 + "]";
}
}
测试:
@Test
/*
* set方法注入对象类型
*/
public void demo3() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Employee employee = (Employee) applicationContext.getBean("employee");
System.out.println(employee);
}
输出:
Employee [name=涛哥, car2=Car [name=宝马, price=800000.0]]
set方法注入对象类型的属性的总结:
1、类中(对象类型的)变量的类型须与ref中的属性对应的类名相同(代码标红处)
2、类中(对象类型的)变量名与注入的属性名相同(代码标蓝处)