01.Spring Ioc 容器 - 概述
2016-09-26 22:36
169 查看
基本概念
Spring 的 Ioc 容器,通常也称应用上下文。它包含了两个概念 Ioc 和 容器:容器:顾名思义就是用来装东西的,在 Spring 中容器里盛放的就是各种各样的 Bean。既然装了东西,那么理所应当的要控制东西何时盛放(添加),何时倒掉(移除),这就是所谓的 Bean 管理。因此 Spring 容器的作用是负责 Bean 的创建和管理。
Ioc:Inversion of Control,即控制反转,意指控制权的转换。原来创建 Bean 需要开发者利用 new 关键字创建 Bean 实例,现在 Spring 容器替我们完成了这一工作,开发者只需负责调用 Bean 即可。
Beanfactory
了解了 Spring 的 Ioc 容器作用后,接下来就要知道容器具体的指什么?在 Spring 中容器用 Beanfactory 指代。下面来看它的接口定义:public interface BeanFactory { // 表示由 FactoryBean 创建的 Bean,与依赖注入有关 String FACTORY_BEAN_PREFIX = "&"; // 取得 Bean Object getBean(String name) throws BeansException; <T> T getBean(String name, Class<T> requiredType) throws BeansException; <T> T getBean(Class<T> requiredType) throws BeansException; Object getBean(String name, Object... args) throws BeansException; <T> T getBean(Class<T> requiredType, Object... args) throws BeansException; // 容器中是否包含指定的 Bean boolean containsBean(String name); // 判断 Bean 的属性(单例或原型,两者是对立关系) boolean isSingleton(String name) throws NoSuchBeanDefinitionException; boolean isPrototype(String name) throws NoSuchBeanDefinitionException; // 判断是否匹配指定的类型 boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException; boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException; // 取得 Bean 类型 Class<?> getType(String name) throws NoSuchBeanDefinitionException; // 取得 Bean 的别名 String[] getAliases(String name); }
观察代码,可以发现接口中存放着各种 Bean,并提供了这些 Bean 的查询功能,所以才会将其抽象为容器。
现实生活中可以被称之为容器的东西有很多,如碗,杯子,水桶,盒子等等,它们除了共有的相同点——盛放东西外,各自作用也大相庭径,比如碗用来盛饭,杯子用来装水,盒子用来收纳物件。在 Spring 中也一样, BeanFactory 是容器的抽象,它存在着各种各样的子类,实现类,它们除了装载、管理 Bean 外,同样有着各自不同的作用。下面来看它的继承关系:
观察上图,发现一个特别的接口——ApplicationContext,该接口是 BeanFactory 的子接口,同样的有许多接口继承了它。所以在 Spring 中它的重要性毋庸置疑。
ApplicationContext
经过上面的分析,我们了解了 Spring Ioc 容器的作用,知道了容器在 Spring 代指 BeanFactory 。同时提到了该接口,如果是 BeanFactory 代指水杯,那么 ApplicationContext 就是不锈钢保温杯。除了盛水的作用外,还具备防摔,防锈,保温的功能。可以将其是理解为 BeanFactory 的高级形态,也称应用上下文。应用上下文在在简单容器的基础上添加了许多面向框架的特性。首先来它的签名:
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver
ListableBeanFactory 是 Bean 相关的列表功能
HierarchicalBeanFactory 代表了支持层级功能
MessageSource 代表了支持 Spring的国际化信息
ApplicationEventPublisher 代表了支持 Spring的事件处理
ResourcePatternResolver 则资源相关的处理功能
再来看看该接口的定义:
String getId(); String getDisplayName(); long getStartupDate(); ApplicationContext getParent(); AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;
ApplicationContext 虽然是 BeanFactory 的子接口,但是可以认为它不是一个 BeanFactory,ApplicationContext 对象里面包含了一个 BeanFactory 对象。
相关 Bean 基本功能是调用了其内部的一个BeanFactory 对象来实现的,而不是自己进行的实现。它对BeanFactory进行了一定的封装扩展,使其具备更多不同的功能。
参考
http://www.programgo.com/article/21502107107/相关文章推荐
- boost 容器概述
- STL关联容器概述 http://blog.csdn.net/yfkiss/article/details/6594859
- flannel 概述 - 每天5分钟玩转 Docker 容器技术(58)
- STL关联容器概述
- GIS+=地理信息+容器技术(1)——容器技术概述
- flannel 概述 - 每天5分钟玩转 Docker 容器技术(58)
- STL容器概述
- GIS+=地理信息+容器技术(1)——容器技术概述
- 中间件随笔1-Servlet容器概述
- C++ Primer : 第十一章 : 关联容器之概述、有序关联容器关键字要求和pair类型
- Java使用EJB容器的详细概述
- JAVA容器分析之概述
- STL关联容器概述
- 【足迹C++primer】24、顺序容器概述
- C++容器概述和序列式容器基本操作
- 容器类概述(2)—List
- Java容器--接口概述
- 自己实现Spring IoC容器(一)概述
- 容器技术概述
- C/C++ 标准容器 vector的内存空间自动增长概述