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的更多相关文章

随机推荐

  1. cursor变换

    cursor:hand 与 cursor:pointer 的效果是一样,都像手形光标.但用FireFox浏览时才注意到使用cursor:hand在FireFox.chorme里并被支持. cursor ...

  2. 巧用C#做中间语言 实现Java调用.net DLL

    本文将详细为大家介绍一个java调用.net DLL的方法,以实现特殊的客户的特殊要求:“在Java项目中必须使用其提供的用.net写的DLL加密机制!” 环境与工具: ◆.net framework ...

  3. 零散的笔记:jquery中的事件

    1.替代mouseover和mouseout的事件 jquery的mouseover和mouseout事件在移到子页面时也会触发,这在移到一级菜单弹出二级菜单,移到二级菜单时一级菜单也要显示时,这两个 ...

  4. php处理中文字符串

    使用mbstring 先转换成UTF-8编码 mb_convert_encoding(Input::get('tags'),'UTF-8') mbstring用法参考http://php.net/ma ...

  5. php中文件引入require

    ./ 表示当前层 ../表示向上一层 php中好像不能像asp那样,用 “/” 表示根目录,但可以用$_SERVER['DOCUMENT_ROOT'] 表示网站根目录 引用分为三种: 上级对下级的引用 ...

  6. git stash 保存修改现场

    用途:当你正在分支上做一个项目的时候,突然必须停下来去做别的事情,但因为没有此项目还没改好,所以不想commit 就可以保留现场,等忙完后再回复现场继续修改. bug处理保存开发现场$ git sta ...

  7. VISUAL STUDIO 2005连接MYSQL数据库

    // mysql.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <string.h> #include &l ...

  8. out.print和out.write方法

    <%@ page language="java" import="java.util.*" %> <%@ page pageEncoding= ...

  9. poj Fishnet

    http://poj.org/problem?id=1408 #include<cstdio> #include<cstring> #include<cmath> ...

  10. 测试Flask+PYTHON的WEB框架

    参数URL: http://blog.csdn.net/qwiwuqo/article/details/8970621 安装flask之前,你必须要先安装python和easy_install. 安装 ...