1.创建所需要的Student 和 Grade实体类
public class Student { //学生实体类 private String name; //姓名 private Integer age; //年龄 private Grade grade; //年级 @Override public String toString() { return "Student [name=" + name + ", age=" + age + ", grade=" + grade + "]"; } public Student() { super(); } public Student(String name, Integer age) { super(); this.name = name; this.age = age; } public String getName() { return name; } // set() DI 依赖注入 public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Grade getGrade() { return grade; } public void setGrade(Grade grade) { this.grade = grade; } }
public class Grade { //年级实体类 private String name; //年级名称 @Override public String toString() { return "Grade [name=" + name + "]"; } public Grade() { super(); } public Grade(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
2.创建对应的applicationContext.xml文件 方法项目中的src目录下
<?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"> <!-- 配置Grade 类的bean 01.设值注入 保证类中有属性对应的set()即可 --> <bean id="grade" class="cn.bdqn.bean.Grade"> <!-- name的属性值 默认使用DI 查询类中的setName() --> <property name="name" value="1年级"/> </bean> <!-- 配置学生Bean 实例化学生对象 默认执行的是无参构造 --> <bean id="student" class="cn.bdqn.bean.Student"> <property name="name" value="小马"/> <property name="age" value="50"/> <!-- 对类中的域属性 赋值 使用ref --> <property name="grade" ref="grade"/> </bean> </beans>
3.创建对应的测试类
public class StudentTest { @Test public void test01(){ ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml"); /* * 获取容器给我们创建的Student对象 ioc的体现 * 本身由自身创建对象的过程,把创建对象的权利移交给了spring容器! IOC 控制反转 * * 之前 Student student=new Student(); * 现在context.getBean("student"); * context容器来创建对象了 * */ Student student=(Student) context.getBean("student"); System.out.println(student); } }
4.运行查看效果
5.修改Student类中的代码 为了验证 使用构造注入的时候可以省略set、get以及无参构造方法
public class Student { //学生实体类 private String name; //姓名 private Integer age; //年龄 private Grade grade; //年级 @Override public String toString() { return "Student [name=" + name + ", age=" + age + ", grade=" + grade + "]"; } //带参构造 public Student(String name, Integer age, Grade grade) { super(); this.name = name; this.age = age; this.grade = grade; } }
6.修改applicationContext.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"> <!-- 配置Grade 类的bean --> <bean id="grade" class="cn.bdqn.bean.Grade"> <!-- name的属性值 默认使用DI 查询类中的setName() --> <property name="name" value="1年级"/> </bean> <!-- 02.构造注入 调用带参构造来创建对象的实例 保证类中有相应的带参构造 set()和无参构造 都可以 消失了... --> <bean id="student" class="cn.bdqn.bean.Student"> <!-- 001.使用参数下标 <constructor-arg index="0" value="小马"/> <constructor-arg index="1" value="50"/> <constructor-arg index="2" ref="grade"/> --> <!--002.按照参数的顺序 必须和参数顺序 一致 <constructor-arg value="小马1"/> <constructor-arg value="501"/> <constructor-arg ref="grade"/> --> <!--003.使用构造参数名称 不是全局变量 进行注入 推荐使用 --> <constructor-arg name="name" value="小马2"/> <constructor-arg name="age" value="502"/> <constructor-arg name="grade" ref="grade"/> </bean> </beans>
7.测试代码不变直接运行查看效果
8.使用p命名空间注入 修改Student实体类,因为p注入需要对应的set()和无参构造器
public class Student { //学生实体类 private String name; //姓名 private Integer age; //年龄 private Grade grade; //年级 @Override public String toString() { return "Student [name=" + name + ", age=" + age + ", grade=" + grade + "]"; } // p 注入的时候需要 public Student() { super(); } //带参构造 public Student(String name, Integer age, Grade grade) { super(); this.name = name; this.age = age; this.grade = grade; } //p 必须要有set() public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Grade getGrade() { return grade; } public void setGrade(Grade grade) { this.grade = grade; } }
9.修改applicationContext.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" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 配置Grade 类的bean --> <bean id="grade" class="cn.bdqn.bean.Grade"> <!-- name的属性值 默认使用DI 查询类中的setName() --> <property name="name" value="1年级"/> </bean> <!-- 03.使用p命名空间注入 必须有set()和 无参构造函数 <bean id="student" class="cn.bdqn.bean.Student" p:name="小马哥" p:age="50" p:grade-ref="grade"/>--> <!-- 04.使用c命名空间注入 必须要有对应的带参构造 --> <bean id="student" class="cn.bdqn.bean.Student" c:name="小马哥" c:age="50" c:grade-ref="grade"/> </beans>
10.测试代码不动 直接运行看效果