01.Spring Ioc 容器
基本概念
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进行了一定的封装扩展,使其具备更多不同的功能。
参考
01.Spring Ioc 容器的更多相关文章
- JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(6):Spring IOC容器学习(概念、作用、Bean生命周期)
一.IOC控制反转概念 控制反转(IOC)是一种通过描述(在Java中可以是XML或者是注解)并通过第三方去生产或获取特定对象的方式. 主动创建模式,责任在于开发者,而在被动模式下,责任归于Ioc容器 ...
- Spring IoC容器的初始化过程
Spring IoC容器的初始化包括 BeanDefinition的Resource定位.载入和注册 这三个基本的过程.IoC容器的初始化过程不包含Bean依赖注入的实现.Bean依赖的注入一般会发生 ...
- 【Spring】非Spring IOC容器下获取Spring IOC上下文的环境
前言 在Spring Web项目中,有些特殊的时候需要在非Spring IOC容器下获取Spring IOC容器的上下文环境,比如获取某个bean. 版本说明 声明POM文件,指定需引入的JAR. & ...
- 学习Spring(一) 实例化Spring IoC容器
实例化Spring IoC容器 1,读取其配置来创建bean实例 2,然后从Spring IoC容器中得到可用的bean实例 Spring提供两种IoC容器实现类型 a,一种为bean工厂 b,应用程 ...
- MyEclipse Spring 学习总结一 Spring IOC容器
一.Spring IOC容器---- Spring AllicationContext容器 程序的结构如下: 1.首先在MyEclipse 创建创建Java Project 2.创建好后,添加spin ...
- 对Spring IoC容器实现的结构分析
本文的目标:从实现的角度来认识SpringIoC容器. 观察的角度:从外部接口,内部实现,组成部分,执行过程四个方面来认识SpringIoC容器. 本文的风格:首先列出SpringIoC的外部接口及内 ...
- spring IOC容器实例化Bean的方式与RequestContextListener应用
spring IOC容器实例化Bean的方式有: singleton 在spring IOC容器中仅存在一个Bean实例,Bean以单实例的方式存在. prototype 每次从容器中调用Bean时, ...
- 解读Spring Ioc容器设计图
在Spring Ioc容器的设计中,有俩个主要的容器系列:一个是实现BeanFactory接口的简单容器系列,这系列容器只实现了容器最基本的功能:另外一个是ApplicationContext应用上下 ...
- 纯注解快速使用spring IOC容器
使用spring的ioc容器实现对bean的管理与基本的依赖注入是再经典的应用了.基础使用不在详述. 这里主要介绍下使用注解实现零配置的spring容器.我相信你也会更喜欢使用这种方式.Spring ...
随机推荐
- BZOJ5443:[CEOI2018]Lottery
我对状态空间的理解:https://www.cnblogs.com/AKMer/p/9622590.html 题目传送门:https://www.lydsy.com/JudgeOnline/probl ...
- Centos6.5上的iptables
1.Centos6.5默认开启了iptables 当Centos6.5上安装了MySQL后,在远程连接它,如果出现10060的错误,说明iptables在起作用. 关闭iptables即可,sudo ...
- C# 播放音乐
用 .NET 自带的类库 System.Media 下面的 SoundPlayer 来播放音乐的方式,此种方式使用托管代码,应该是更为可取的方式吧 使用起来非常简单,下面稍作说明: . 支持同步.异步 ...
- JS ES6 -- let命令
1.ES6新增了块级作用域的let和const 这新特性let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. for循环的计数器,就很合适使用let命令 ...
- 设置win7资源管理器启动时的默认位置-windows-操作系统-网页教学网
设置win7资源管理器启动时的默认位置-windows-操作系统-网页教学网 如何设置win7资源管理器启动时的默认位置?我不太习惯 Win 7 的资源管理器默认总是打开库,我还是喜欢资源管理器打开树 ...
- Sharepoint 对于是否签出文件进行编辑区别
在库设置----版本控制设置 一.需要签出才能编辑 例如需要对以上通用盒进行修改时,若在“使用资源管理器中打开”粘贴文件时会提示必须先签出项目 签出文件后,再粘贴文件到文档库中,可以选择签入的版本类型 ...
- Frequent Pattern 挖掘之二(FP Growth算法)
Frequent Pattern 挖掘之二(FP Growth算法) FP树构造 FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法的代价,他不需要不断得生成候选项目队列和不断 ...
- 基于MapReduce的矩阵乘法
参考:http://blog.csdn.net/xyilu/article/details/9066973文章 文字未得及得总结,明天再写文字,先贴代码 package matrix; import ...
- 3.Windows应急响应:蠕虫病毒
0x00 前言 蠕虫病毒是一种十分古老的计算机病毒,它是一种自包含的程序(或是一套程序),通常通过网络途径传播, 每入侵到一台新的计算机,它就在这台计算机上复制自己,并自动执行它自身的程序.常见的蠕虫 ...
- 2. DVWA亲测CSRF漏洞
DVWA登陆 用户名:admin 密码:password Low级: 查看源代码: <?php if (isset($_GET['Change'])) { // Turn requ ...