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的更多相关文章
随机推荐
- 8个不可不知的Mac OS X专用命令行工具(转)
OS X的终端下通用很多Unix的工具和脚本.如果从Linux迁移到OS X会发现很多熟悉的命令和脚本工具,其实并没有任何区别. 但是OS X也提供了很多其他系统所没有的特别的命令行工具.我们推荐8个 ...
- Mysql 源码编译教程贴
题外话:这是一篇教程贴,不仅学的是mysql的编译,还是一些编译的知识.我也是一个菜鸟,写一些感悟和心得,有什么问题可以批评指正,谢谢! 如果只是为了安装请移到我的另一篇安装贴: Mysql安装贴 环 ...
- 03_RHEL7.1去掉注册提示
# rpm –qa|grep subscription-manager 出现类似下面的代码: subscription-manager-firstboot-1.13.22-1.el7.x86_64 s ...
- underscorejs-pluck学习
2.14 pluck 2.14.1 语法: _.pluck(list, key) 2.14.2 说明: pluck方法根据key对list数组中的每个对象进行检索,返回检索成功的属性值,否则返回und ...
- frame与iframe的区别?
1.frame不能脱离frameSet单独使用,iframe可以 2.frame不能放在body中,否则不能正常显示 3.嵌套在frameSet中的iframe必需放在body中,不嵌套在frameS ...
- POJ1700:Crossing River(过河问题)
POJ1700 题目链接:http://poj.org/problem?id=1700 Time Limit:1000MS Memory Limit:10000KB 64bit IO ...
- json数组对象和对象数组(转)
转自:http://www.cnblogs.com/zhangji/archive/2011/09/02/2163811.html 一.Json的简单介绍 从结构上看,所有的数据最终都可以分成三种类型 ...
- [异常解决] Make nRF51 DFU Project Appear "fatal error: uECC.h: No such file or directory"
What's the problem When I make the nRF51's DFU project appear "no uECC.h" error: And then ...
- iOS Block 用法 (1)-once again
Block简介: Block的实际行为和Function很像,最大的差别是在可以存取同一个Scope的变量值.Block实体形式如下: ^(传入参数列){行为主体}; Block实体开头是“^”,接着 ...
- 【技术贴】xp任务栏字体变大变小
今天远程到服务器上,发现任务栏字体变小了,百度了很久,发现百度就是个渣渣,什么答案都搜不到.就自己摸索了一下. 方法一: 桌面右击属性-外观-字体大小, 下拉匡 方法二 :桌面右击[属性]-[外观]- ...