目录
2. 简单的Student-Teacher工程,演示Spring中Ioc和DI的基本用法
1. 背景概念
(1)IoC控制反转
Spring通过一种称作控制反转IoC的技术促进了松耦合。
当应用了IoC, 一个对象依赖的其他对象会通过被动的方式传递进来,而不是这个对象自己查找或创建的。
(2)IoC容器的功能
实例化,初始化组件,装配组件依赖关系,负责组件生命周期管理。
2. 简单的Student-Teacher工程,演示Spring中Ioc和DI的基本用法
2.1 maven系统的配置文件:pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.my.test</groupId>
<artifactId>SpringIoCDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.3</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
</dependencies>
</project>
2.2 bean的配置文件: bean_ioc.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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<bean id="student" class="com.my.test.Student">
<property name="name" value="Lucky"/>
<property name="teacher" ref="teacher"/>
</bean>
<bean id="teacher" class="com.my.test.Teacher">
<property name="name" value="Sheryl"/>
</bean>
</beans>
2.3 类代码:Student类,Teacher类
(1)Student类
package com.my.test;
public class Student {
private String name;
private Teacher teacher;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Teacher getTeacher() {
return this.teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
}
(2)Teacher类
package com.my.test;
public class Teacher {
private String name;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
2.4 测试类(程序入口)
package com.my.test.demo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.my.test.Student;
import com.my.test.Teacher;
public class SpringIoCDemoTest {
public static void main(String[] args) {
//跟spring要实例,补充:spring默认是单例模式
ApplicationContext context = new ClassPathXmlApplicationContext("bean_ioc.xml");
Student stu1 = (Student) context.getBean("student");
Student stu2 = (Student) context.getBean("student");
Teacher teacher = (Teacher) context.getBean("teacher");
//下方两个语句输出结果一样。在Student的实例中,引用了Teacher实例,由spring来做
System.out.println("学生1姓名是:" + stu1.getName() + ", 老师是:" + stu1.getTeacher().getName());
System.out.println("学生2姓名是:" + stu2.getName() + ", 老师是:" + stu2.getTeacher().getName());
//直接打印Teacher的实例,同样是由spring来生成
System.out.println("老师姓名是:" + teacher.getName());
}
}
输出结果:
学生1姓名是:Lucky, 老师是:Sheryl
学生2姓名是:Lucky, 老师是:Sheryl
老师姓名是:Sheryl