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. 【USACO 1.5.3】特殊的质数肋骨

    [题目描述]农民约翰的母牛总是生产出最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们. 农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数 ...

  2. Oracle高级查询,事物,过程及函数

    一 数值函数 数值 abs,ceil,floor,round,trunc字符串 instr,substr SQL>SELECT 'ABS':'|| ABS(-12.3) FROM DUAL; 运 ...

  3. 关于ligerui和其他前端脚本的学习方法(适用于自己)

    特别是看别人的源代码(来源于自己看的那个cms系统),比如ligerui,别人用的juery和ligerui结合的很灵活,比如下面一段代码 var itemiframe = "#framec ...

  4. Linux shell (一)

    echo -e "Hello World! \a \n"     # -e 解析反斜杠 read -p "Please input your first name: &q ...

  5. Java 保留两位小数

    在实际项目开发中,经常会存在浮点数四舍五入保留几位小数的问题,故收集了几种常用方法: 直接上代码(保留两位小数). Format.java: import java.math.BigDecimal; ...

  6. Jzzhu and Chocolate

    CF#257 div2 C:http://codeforces.com/contest/450/problem/C 题意:n*m的方格,每次可以横着或者纵向的切一刀,问切k之后,最小的最大是多少. 题 ...

  7. CLOUDSTACK我也来啦

    最近,专业客户需要私有云和自助管理. 那我就倒一个CLOUDSTACK出来吧. WEB UI已搞定. 难点在于高级网络和主存储.再接再力. ... 因为要反复重装,在服务端有个快速重建步骤: serv ...

  8. 7.1.1.关闭WebSocket连接

    7.1.定义 7.1.1.关闭WebSocket连接 为_关闭WebSocket连接_,端点需关闭底层TCP连接.端点应该使用一个方法完全地关闭TCP连接,以及TLS会话,如果合适,丢弃任何可能已经接 ...

  9. logstash 处理tomcat catalina.out

    input { file { type => "zj_api" path => ["/data01/applog_backup/zjzc_log/zj-api ...

  10. (转载)PHP删除数组中的特定元素的代码

    (转载)http://www.jb51.net/article/30689.htm 我们知道,PHP没有提供专门删除一个特定数组元素的方法.但是可以通过unset()函数来完成这种要求比如下面的程序: ...