Spring6梳理9—— 依赖注入之注入对象类型属性
9.1 依赖注入之外部注入对象类型属性
9.1.1 创建dept与emp类
1.dept类
package com.atguigu.spring6.iocxml.ditest;
//部门类
public class Dept {
private String dname;
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public void info() {
System.out.println("部门名称是:"+dname);
}
}
2.emp类
package com.atguigu.spring6.iocxml.ditest;
//员工类
public class Emp {
private Dept dept;
private String ename;
private Integer age;
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public void work() {
System.out.println(ename + "工作到了" + age);
dept.info();
}
}
由于一个部门有多个员工,因此部门与员工的关系为一对多,所以将唯一的Dept作为引用的bean,外键为
9.1.2 创建配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dept" class="com.atguigu.spring6.iocxml.ditest.Dept">
<property name="dname" value="安保部"></property>
</bean>
<bean id="emp" class="com.atguigu.spring6.iocxml.ditest.Emp">
<property name="ename" value="lucy"></property>
<property name="age" value="50"></property>
<!--注入对象类型属性
private Dept dept;
-->
<property name="dept" ref="dept"></property>
</bean>
</beans>
9.1.3 创建测试类
package com.atguigu.spring6.iocxml.ditest;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @package: com.atguigu.spring6.iocxml.ditest
* @className: TestEmp
* @Description:
* @author: haozihua
* @date: 2024/9/18 11:10
*/
public class TestEmp {
public static void main(String[] args) {
ApplicationContext context
= new ClassPathXmlApplicationContext("bean-ref.xml");
Emp emp = context.getBean("emp", Emp.class);
emp.work();
}
}
9.1.4 运行结果
由运行结果可以得出,当实体类出现需要注入对象的情况下,可以使用
<property name="dept" ref="dept"></property>
对对象进行引用,从而在实体类对象中注入另一个实体类对象,使用被注入的对象的方法变量等内容
9.2 依赖注入之内部注入对象类型
<!-- 内部注入bean-->
<bean id="emp2" class="com.atguigu.spring6.iocxml.ditest.Emp">
<property name="ename" value="mary"></property>
<property name="age" value="20"></property>
<!--注入对象类型属性
private Dept dept;
-->
<property name="dept"><!--与实体类保持一致-->
<bean class="com.atguigu.spring6.iocxml.ditest.Dept">
<property name="dname" value="财务部"></property>
</bean>
</property>
</bean>
内部注入对象时,需要在<property></property>标签内部设置name,以及内部<bean></bean>标签中的class属性
由于获取Bean是基于getter()和setter()赋值,因此<property></property>标签的name属性值必须与实体类变量保持一致
9.3 依赖注入之内部注入对象类型
<!-- 级联注入bean-->
<bean id="emp3" class="com.atguigu.spring6.iocxml.ditest.Emp">
<property name="ename" value="李湘"></property>
<property name="age" value="30"></property>
<property name="dept" ref="dept3"></property>
<property name="dept.dname" value="人事部"></property>
</bean>
级联注入对象时,需要注意property的name属性与实体类保持一致,ref必须引用的是xml文件中定义好的外部bean