spring02IOC
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;
} }
Student实体类
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>
applicationContext.xml
10.测试代码不动 直接运行看效果
spring02IOC的更多相关文章
随机推荐
- underscorejs-pluck学习
2.14 pluck 2.14.1 语法: _.pluck(list, key) 2.14.2 说明: pluck方法根据key对list数组中的每个对象进行检索,返回检索成功的属性值,否则返回und ...
- href 里面 链接前面加/与不加的区别?(绝对路径与相对路径)
在写href链接时,有绝对路径与相对路径,href 里面 链接前面加/与不加的区别? href="/cp/images/lis.jpg" 相对路径 cp前面/会获取当前路径,组合成 ...
- PHP获取当前文件路径信息的方法
文件名 test.php 1.__FILE__ 获取 “路径 + 文件名” : /var/www/test/test.php echo __FILE__; //取得当前文件的路径:用魔术常量 __ ...
- JavaScript 学习-变量的作用域和块级作用域
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 用tbody代替div 解决 table tr的隐藏问题
有如下需求,需要控制一个table内几个tr的显示问题.一开始想的方法是在这几个要显示的tr外面套一个div,利用div的display:none属性来解决. 但是后来发现div和tr嵌套的时候会有问 ...
- 一个处理Date与String的工具类
public class DateUtil { private DateUtil(){ } public static final String hhmmFormat="HH:mm" ...
- 之前C#代码的重新设计
/* 我用python重构了一把这个代码 大家的反应似乎是过度设计了 好吧,我决定不那么激进,采用更中庸一些的重构 我也有些疑惑: 是否如果重构后的代码比重构前要多,就算过度了呢? */ void m ...
- 转:Google论文之三----MapReduce
文章来自于:http://www.cnblogs.com/geekma/p/3139823.html MapReduce:大型集群上的简单数据处理 摘要 MapReduce是一个设计模型,也是一个处理 ...
- 软硬大比拼 硅胶、TPU和PC材质对比
手机保护壳的材质有很多种,目前保护壳市场上最为常见的就是硅胶.TPU.PC材质了.那么我们不禁要问,PU.硅胶.PC三材质到底有哪些区别呢?普通消费者在购买保护壳的时候能否从外表就能看出保护壳材质?P ...
- UVA253 Cube painting(数学)
题目链接. 分析: 用的<训练指南>上的方法.详见P17. 从6个面中选一个做顶面,再从剩下的4个面中选1个做正面,则此正方体唯一确定. 需要枚举共6*4=24种. #include &l ...