Spring概述与架构
Spring核心之一——Ioc/DI(一)
1 Spring下载
spring-framework-4.1.2下载地址:
http://download.csdn.net/download/winston_d/10046400
spring-framework-3.2.0.RELEASE-dependencies(依赖包)下载地址:
http://download.csdn.net/download/winston_d/10046413
spring-4.1.2目录结构
2 Spring核心
Spring核心包括控制反转(IoC)、依赖注入(DI)和AOP。其中控制反转(IoC)和依赖注入(DI)是同一概念。
3 IoC/DI
IoC(Inversion of Control):控制反转,是一种设计思想。在开发中,IoC意味着将设计好的对象交给容器来创建和注入。
传统的Java程序设计中,我们直接在对象内部通过new进行创建对象,这是程序主动去创建依赖对象;而IoC是有专门的容器来控制对象的创建。所谓反转是依赖对象的获取被反转了,容器来帮助我们创建和注入依赖对象,而对象只是被动的接受依赖对象。相对的程序中对象主动控制获取依赖对象叫作正转。
DI(Dependency Injection):依赖注入,容器的管理对象对于外部资源(对象、资源、常量数据等)的依赖由IoC容器来管理和注入。
组件之间依赖关系由容器在运行期决定,即容器会动态的将某个依赖关系注入到组件中。依赖注入的目的不是为应用程序带来更多功能,而是为了提升组件的重用性,通过简单的配置就可以搭建一个灵活的、可扩展的应用。
IoC和DI是同一个概念的不同角度描述,由于控制反转概念比较含糊(可能只是理解为容器控制对象,很难想到谁来维护对象关系),所以04年Martin Fowler又给出了一个新的名字“依赖注入”,明确描述了被注入对象依赖IoC容器配置依赖对象。
4 BeanFactory
IoC容器负责实例化、配置应用程序中的对象及建立这些对象间的依赖关系。IoC容器通过读取配置文件中的数据来对各个对象进行实例化和装配。一般基于xml配置文件配置,也可以通过注解的方式进行配置。
Ioc容器的代表是spring-beans包中的BeanFactory接口。BeanFactory接口提供了IoC容器最基本功能,而spring-context包中的ApplicationContext接口继承了BeanFactory接口,还扩提供了与Spring AOP集成、国际化处理(I18N)、文本信息解析工具、事件传播等功能。
4.1 BeanFactory接口源码
public interface BeanFactory {
String FACTORY_BEAN_PREFIX = "&";
// 根据name获取Bean
Object getBean(String name) throws BeansException;
// 根据name和Class获取Bean
<T> T getBean(String name, Class<T> requiredType) throws BeansException;
// 根据Class获取Bean
<T> T getBean(Class<T> requiredType) throws BeansException;
// 根据name和其它信息获取Bean
Object getBean(String name, Object... args) throws BeansException;
// 根据Class和其它信息获取Bean
<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
// 判断容器是否包含某个Bean
boolean containsBean(String name);
// 判断Bean是否是单例
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
// 判断Bean是否是多例
boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
// 判断某个Bean是否是某个Class类型
boolean isTypeMatch(String name, Class<?> targetType) throws NoSuchBeanDefinitionException;