IOC的实现
实现IOC
1 、创建一个项目:maven的java项目
2、导入依赖:spring-context、spring-beans、spring-expression、spring-core、commons-logging、spring-aop
在pom.xml中配置相关包
<!-- 导入spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.27.RELEASE</version>
</dependency>
<!-- 测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
3、 配置文件—spring配置文件
(1)文件位置源文件夹
(2)文件名称任意的,官方建议名称:applicationContext.xml
(3)内容
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 容器当读取此配置文件时,就会读取到此bean标签配置,标签中的class属性内设置一个类型的全限定名
那么当容器读取到此处时容器就会创建此类型的对象,对象会被保存到容器中 -->
<!-- 此时就变成如果能够拿到容器,容器能够读取文件,那么就可以从容器中获取指定的对象 -->
<!-- id属性是唯一标识,通过唯一标识可以从容器中获取出来指定类型的对象 -->
<!-- people对象 -->
<bean id="p1" class="com.study.bean.People">
</bean>
<!-- fruitjuice对象 -->
<bean id="fj1" class="com.study.bean.FruitJuice">
</bean>
</beans>
4、相关实体类
People
public class People {
/**
* 当没有new操作,也没注入操作时,此时果汁对象还不存在
* 对象不存在时,调用方法就会出错
* 即此时fj.havingNutrition();出错
* 会出现“空指针异常”的报错
*/
//此类中drink方法里面需要一个果汁对象,所以容器创建一个果汁对象,然后给people注入进来
//只要注入成功了,那么对象就存在了,对象存在方法调用就不会出错
private FruitJuice fj;
public void setFj(FruitJuice fj) {
this.fj = fj;
}
public void drink() {
//FruitJuice fj=new FruitJuice();
fj.havingNutrition();
}
}
FruitJuice
public class FruitJuice {
public void havingNutrition() {
System.out.println("哎呀,我喝了果汁,感觉酸酸甜甜的");
}
}
5、 测试
//入门测试,是否可以从容器中获取出来people对象
@Test
public void getPeopleTest(){
//获取到容器,容器读配置文件
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//从容器获取指定id的对象
People p = (People) context.getBean("p1");//对象不是new出来的,从容器中get出来的
System.out.println(p);
FruitJuice fj = (FruitJuice) context.getBean("fj1");
System.out.println(fj);
}
6、注入操作
spring配置文件中通过property标签实现注入配置
<bean id="p1" class="com.study.bean.People">
<!-- 实现注入 -->
<!-- name属性指定给类中哪个属性注入对象
ref属性指定个fj属性注入哪个对象 -->
<property name="fj" ref="fj1"/>
</bean>
<!-- fruitjuice对象 -->
<!-- fj1=com.study.bean.FruitJuice -->
<bean id="fj1" class="com.study.bean.FruitJuice">
</bean>