Spring系列二:IoC 容器
还君明珠双泪垂,恨不相逢未嫁时。

概述
Spring IoC容器是Spring框架的核心。只需要进行简单的容器配置,就可以将创建对象,使用对象,销毁对象联系在一起,从而管理从创建对象到销毁对象的整个生命周期。Spring容器使用依赖项注入(DI)来管理组成应用程序的组件。
Spring提供以下两种类型的容器。
BeanFactory容器ApplicationContext容器
BeanFactory
BeanFactory本质上就是一个高级工厂的接口,该工厂能够维护不同bean及其依赖项的对象。
BeanFactory使我们能够读取bean定义并使用bean工厂访问它们
InputStream is = new FileInputStream("beans.xml");
BeanFactory factory = new XmlBeanFactory(is);
//Get bean
HelloWorld obj = (HelloWorld) factory.getBean("helloWorld");
创建bean工厂的其他方法如下:
Resource resource = new FileSystemResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(resource);
ClassPathResource resource = new ClassPathResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(resource);
基本上都是使用getBean(String)方法在容器中检测并获取实例。 BeanFactory接口里面的方法非常简单
BeanFactory methods
BeanFactory接口主要有以下方法由客户端调用
boolean containsBean(String):如果BeanFactory包含与给定名称匹配的bean定义或bean实例,则返回trueObject getBean(String):返回给定名称注册的bean的实例。根据BeanFactory如何配置Bean,将返回单个实例或者共享实例或新创建的Bean。当找不到该bean(在这种情况下它将是NoSuchBeanDefinitionException),或者在实例化和准备该bean时发生异常时,将抛出BeansException。Object getBean(String,Class):返回给定名称注册的bean。返回的bean将被强制转换为给定的Class。如果无法投射bean,则将引发相应的异常(BeanNotOfRequiredTypeException)。此外,适用getBean(String)方法的所有规则Class getType(String name):返回具有给定名称的Bean的Class。如果找不到与给定名称对应的bean,则将引发NoSuchBeanDefinitionExceptionboolean isSingleton(String):确定给定名称注册的bean定义或bean实例是否为单例。如果找不到与给定名称对应的bean,则将引发NoSuchBeanDefinitionExceptionString [] getAliases(String):返回给定bean名称的别名(如果在bean定义中定义了别名)
ApplicationContext
ApplicationContext容器添加了更多企业特定功能,例如从属性文件解析文本消息的功能以及将应用程序事件发布到感兴趣的事件侦听器的功能。该容器由org.springframework.context.ApplicationContext接口定义。
ApplicationContext容器包含BeanFactory容器的所有功能,因此通常建议在BeanFactory上使用它。 BeanFactory仍可用于轻量级应用程序,例如移动设备或基于applet的应用程序等。
ApplicationContext类型
最常用的ApplicationContext实现如下:
FileSystemXmlApplicationContext–此容器从XML文件加载Bean的定义。在这里,您需要向构造函数提供XML bean配置文件的完整路径。ClassPathXmlApplicationContext–此容器从XML文件加载Bean的定义。在这里,您无需提供XML文件的完整路径,但需要正确设置CLASSPATH,因为此容器将在CLASSPATH中查找bean配置XML文件。WebXmlApplicationContext–此容器从Web应用程序中加载带有所有bean定义的XML文件。
如何创建ApplicationContext
用于应用程序上下文实例化的示例代码如下所示。
ApplicationContext context = new FileSystemXmlApplicationContext("beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");

Spring系列二:IoC 容器的更多相关文章
- Spring系列之IOC容器
一.概述 IOC容器就是具有依赖注入功能的容器,IOC容器负责实例化.定位.配置应用程序中的对象及建立这些对象之间的依赖.应用程序无需直接在代码中new 相关的对象,应用程序由IOC容器进行组装.在S ...
- Spring系列之IOC的原理及手动实现
目录 Spring系列之IOC的原理及手动实现 Spring系列之DI的原理及手动实现 导语 Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架.也是几乎所有J ...
- Spring.NET的IoC容器(The IoC container)——简介(Introduction)
简介 这个章节介绍了Spring Framework的控制反转(Inversion of Control ,IoC)的实现原理. Spring.Core 程序集是Spring.NET的 IoC 容器实 ...
- Spring5源码解析系列一——IoC容器核心类图
基本概念梳理 IoC(Inversion of Control,控制反转)就是把原来代码里需要实现的对象创建.依赖,反转给容器来帮忙实现.我们需要创建一个容器,同时需要一种描述来让容器知道要创建的对象 ...
- 比Spring简单的IoC容器
比Spring简单的IoC容器 Spring 虽然比起EJB轻量了许多,但是因为它需要兼容许多不同的类库,导致现在Spring还是相当的庞大的,动不动就上40MB的jar包, 而且想要理解Spring ...
- Spring 系列教程之容器的功能
Spring 系列教程之容器的功能 经过前面几章的分析,相信大家已经对 Spring 中的容器功能有了简单的了解,在前面的章节中我们一直以 BeanFacotry 接口以及它的默认实现类 XmlBea ...
- 使用Spring.NET的IoC容器
使用Spring.NET的IoC容器 0. 辅助类库 using System; using System.Collections.Generic; using System.Linq; using ...
- Spring系列(二):Spring IoC/DI的理解
这几天重新学习了一下Spring,在网上找了相关的ppt来看,当看到Spring IoC这一章节的时候,先大致浏览了一下内容,有将近50页的内容,内心窃喜~QAQ~,看完这些内容能够对IoC有更深层次 ...
- spring源码系列(二):IOC接口设计分析
这里主要对springIOC接口体系进行简单的概述和分析,具体每个接口详细分析在下面目录: 参考内容: <Spring技术内幕:深入解析 Spring架构与设计原理> 和 <Spri ...
随机推荐
- 数据结构实验之链表八:Farey序列(SDUT 3331)
#include <bits/stdc++.h> using namespace std; typedef struct node { int data2; int data1;//mu ...
- 使用horovod构建分布式深度学习框架
最近两周一直在尝试着分布式深度学习的架构,主要的原因一方面是几台机子全是1060卡,利用深度网络在较大数据样本上训练的效率极其低下,所以尝试着将几台机子做成分布式,看看能否提高训练效率:第二方面是有人 ...
- Python字典元素的增加删除和取出字典所有的键和值
一.增加一个或多个元素 d = {'a': 1} d.update(b=2) #也可以 d.update({‘b’: 2}) print(d) # {'a': 1, 'b': 2} d['e'] = ...
- CF258B
CF258B 题意: 7个人在 $ [1,m] $ 区间内取数,求第一个人选的数的4和7的个数大于其他人的4和7个数总和的方案数. 解法: 要求输入的 $ m $ 可以很大,而且需要按位考虑每隔人的贡 ...
- Mysql数据表字段扩充的小技巧
在开发中,往往需求变更比开发速度要快,就会存在一些问题,比如突然要增加一个字段,我们需要 alter table 表名 add [column] 字段名 数据类型 [列属性] [位置]; 然后修改实体 ...
- Fiddler主界面图标简单说明
Fiddler主界面图标简单说明: 名称 含义 # 抓取HTTP Request的顺序,从1开始,以此递增 Result HTTP状态码 Protocol 请求使用的协议,如HTTP/HTTPS/FT ...
- legend3---12、DB::table('user_questions')和UserQuestion查询的结果的格式不一样
legend3---12.DB::table('user_questions')和UserQuestion查询的结果的格式不一样 一.总结 一句话总结: 推荐使用模型查找的方式,可以直接数组方式访问: ...
- AtomicReference、AtomicStampedReference 和 AtomicMarkableReference
这三个都是自 JDK1.5 开始加入到 java.util.concurrent.atomic 下面的.他们都可以在 lock-free 的情况下以原子的方式更新对象引用. 一.AtomicRefer ...
- MAC为Apache2服务器配置多个虚拟主机
Mac 下自带的 Apache 配置 2016年01月25日 00:25:03 阅读数:1292 参考: http://www.cnblogs.com/snandy/archive/2012/11/1 ...
- Android蓝牙开发技术学习总结
Android开发,提供对蓝牙的通讯栈的支持,允许设别和其他的设备进行无线传输数据.应用程序层通过安卓API来调用蓝牙的相关功能,这些API使程序无线连接到蓝牙设备,并拥有P2P或者多端无线连接的特性 ...