上次说了外部 Bean注入
这次来演示一个内部的 Bean注入
我们先创建一个spring 项目 导入最基本的 spring 包
在项目src目录下创建一个包 cascade
cascade包下创建两个类
Dept 部门类 参考代码如下
package cascade;
//部门类
public class Dept {
private String dname;
public void setDname(String dname) {
this.dname = dname;
}
public String toString() {
return "'dname=’"+dname;
}
}
部门类代码比较简单 就是 定义了一个 dname 部门名称
然后定义了 dname 的 set方法
重写了一下 toString 类方法 返回了一个部门名称 等于部门名称值的字符串 方便最后测试 看数据对不对
Emp 员工类
参考代码如下
package cascade;
//员工类
public class Emp {
private String ename;
private String gender;
//员工属于某一个部门,使用对象形式表示
private Dept dept;
public void setDept (Dept dept) {
this. dept = dept;
}
public void setEname(String ename) {
this.ename = ename;
}
public void setGender(String gender){
this.gender = gender;
}
public void add() {
System.out.println(ename+"::"+gender+"::"+dept);
}
}
这里 员工类 定义了 ename 员工名 gender 员工性别 dept所属部门的对象 然后对应 都给他们定义了自己的set方法
还写了一个 add 方法 用于测试到最后数据能否正常输出
然后 在src下创建 bean.xml
参考代码如下
<?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 = "emp" class = "cascade.Emp">
<property name = "ename" value="keling"></property>
<property name="gender" value="女"></property>
<property name='dept'>
<bean id = "dept" class="cascade.Dept">
<property name="dname" value="开发部"></property>
</bean>
</property>
</bean>
</beans>
可以看到 我们先用 bean标签 声明了 Emp员工类的实体 然后 在里面 通过dept属性赋值 再给一个bean实体
就是我们的Dept 部门类 部门类 是作为一个变量 存储在 员工类里面的 这就是内部Bean注入
然后在src下创建text测试类 参考代码如下
import cascade.Emp;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class text {
public static void main(String args[]) {
//获取配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
Emp emp = context.getBean("emp", Emp.class);
emp.add();
}
}
读取xml配置文件内容 然后反射对象 通过对象调用员工类的add
运行结果如下
也是没有任何问题 这就是种内部 Bean注入 也算是一种级联赋值