1 简介
1.1 IOC简介
IOC(Inverse of Controll),即反转控制。
在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的资源。在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式,增加了学习成本,同时降低了开发效率。
反转控制的思想完全颠覆了获取资源的传统方式,反转了资源的获取方向变为由容器主动的将资源推送给需要的组件。开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源的方式即可,降低了学习成本,提高了开发的效率。
这种行为也称为查找的被动形式。
1.2 DI简介
DI(Dependency Injection),即依赖注入,是IOC反转控制最经典的实现。
在容器中运行的某个组件,如果需要用到另外的组件,就需要通过DI将所需组件动态注入到原组件中。
1.3 底层原理
IOC的底层原理包括:XML解析,工厂模式,反射。
使用XML解析可以读取配置文件中的内容。
通过工厂模式可以降低代码的耦合度。
使用反射进一步降低耦合度,通过配置文件中的内容创建对象。
2 IOC接口
在通过IOC容器读取Bean的实例之前,需要先将IOC容器本身实例化,Spring提供了IOC容器的两种实现方式:BeanFactory和ApplicationContext。
2.1 BeanFactory
IOC容器的基本实现,是Spring内部的基础设施,是面向Spring本身的,不是提供给开发人员使用的。
在加载配置文件时不会创建对象,只有在使用配置对象的时候才会创建对象。
2.2 ApplicationContext
BeanFactory的子接口,提供了更多高级特性,面向Spring的使用者,几乎所有场合都使用ApplicationContext而不是底层的BeanFactory。
在加载配置文件时就会创建对象。
ApplicationContext在初始化上下文时就实例化所有单例的Bean,有两个主要的实现类:
1)ClassPathXmlApplicationContext:对应类路径下的XML格式的配置文件。
2)FileSystemXmlApplicationContext:对应文件系统中的XML格式的配置文件。
3 导包
3.1 核心
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
3.2 依赖
commons-logging-1.1.3.jar
4 入门案例
4.1 创建工程并导包
创建普通Java工程并导入用的到jar包。
4.2 测试代码
创建一个普通类,并在类中创建方法:
public class User {
public void add() {
System.out.println("add ...");
}
}
创建配置文件,并在配置文件中配置普通类的对象:
<?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">
<!-- 配置User对象创建 -->
<bean id="user" class="com.demo.spring.User"></bean>
</beans>
创建测试类,并编写测试方法:
public class TestSpring {
@Test
public void testAdd() {
// 加载配置文件
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
// 获取配置的对象
User user = context.getBean("user", User.class);
// 使用对象
System.out.println(user);
user.add();
}
}
4.3 执行测试
执行测试方法,结果如下:
com.demo.spring.User@26a7b76d
add ...
说明测试成功,通过配置文件获取到了配置的对象。