文章目录
一、控制反转介绍
(1)控制反转的概念
控制反转(Inversion of Control,即IoC):把对象的创建、初始化、销毁等工作交给框架,是框架的重要特征
。并非面向对象编程的术语。控制反转包括依赖注入
和依赖查找
。
(2)容器
由于开发时需要创建很多对象,我们需要找个集合来存储,有Map和List供选择,有查找需求就选Map。所以应用加载时,创建一个Map,用于存放三层对象,将Map称之为容器
。
(3)工厂
工厂就是负责帮我们从容器中获取指定对象的类
。使获取对象的方式发生了改变。
①之前我们获取对象时,采用new的方式,是主动的
。
②现在获取对象时,向工厂要对象,工厂为我们查找或创建对象,是被动的
。
(4)控制反转IoC的作用
削弱计算机程序的耦合,解除代码中的依赖关系。
二、spring基于XML的IoC环境搭建
(1)第一步:导包
测试Spring的IOC,需要导入四个核心jar包+一共日志包。
创建JavaBean:
package com.gql.bean;
public class Persion {
private String name;
private String gender;
private Integer age;
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Persion [name=" + name + ", gender=" + gender + ", age=" + age + ", email=" + email + "]";
}
}
(2)第二步:写配置
Spring的配置文件中,集成了Spring的ioc容器管理的所有组件。
- 注册一个Persion对象,Spring会自动创建这个Persion对象。
- 一个
Bean
标签可以注册一个组件(对象,类) class
:要注册的组件的全类名。id
:对象的唯一标识。property
:为Persion对象的属性赋值。
<?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">
<bean id="p1" class="com.gql.bean.Persion">
<property name="name" value="张三"></property>
<property name="age" value="18"></property>
<property name="email" value="zs@163.com"></property>
<property name="gender" value="男"></property>
</bean>
</beans>
(3)第三步:测试
ApplicationContext:可以理解为代表ioc容器,实际上是容器的接口。
ClassPathXmlApplicationContext:当前应用的xml配置文件在ClassPath下。
我们在容器中一拿到对象就有值了,说明容器帮助我们创建好了对象。
- 容器中对象的创建在容器创建完成时,就已经创建好了。
- 同一个组件在ioc容器中是单实例的。
- ioc容器在创建组件对象的时候(property),会利用setter方法为JavaBean 属性进行赋值。
package com.gql.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.gql.bean.Persion;
public class IoCTest {
@Test
public void test() {
ApplicationContext ioc = new ClassPathXmlApplicationContext("ioc.xml");
Persion p = (Persion) ioc.getBean("p1");
System.out.println(p);
}
}
执行结果如下(成功打印出在配置中注册的Persion对象):
(4)总结几个细节问题
1.src/源码包开始的路径,称为类路径的开始。
- 所有源码包里面的东西都会被合并放在类路径里面。
- java:/bin/
- web:/WEB-INF/classes/
2.测试springIoC不要忘记导commons-logging-1.2.jar包
3.安装sts插件后,在类前会有s标志,Spring容器会接管标志了s的类。
4.加载ioc容器的配置文件问题
有两个实现类供使用:
- new ClassPathXmlApplicationContext(“ioc.xml”); ioc容器的配置文件在类路径下。
- FileSystemXmlApplicationContext(“F://ioc.xml”); ioc容器的配置文件在磁盘路径下。