Spring 容器
Spring提供了两个核心接口:BeanFactory和ApplicationContext,其中applicationContext是BeanFactory的子接口。
他们都可代表Spring容器,Spring容器是生成Bean实例的工厂,并管理容器中的Bean。
Bean是Spring管理的基本单位,在基于Spring的JavaEE应用中,所有的组件都被当成Bean处理,包括数据源、Hibernate的SessionFactory、事务管理器等。
BeanFactory:
Spring容器最基本的接口就是BeanFactory,该接口负责配置、创建,管理Bean,它有一个子接口;AppcationContext,因此也被称为Spring上下文。Spring容器还负责管理Bean与Bean之间的依赖关系。
调用者只需使用getBean()方法即可获得指定Bean的引用,无须关心Bean的实例化过程。
BeanFactory有一个常见的实现类:org.springframework.beans.factory.xml.XmlBeanFactory类。
ApplicationContext是BeanFactory的子接口,对于大部分JavaEE应用而言,使用它作为Spring容器更方便。其常见实现类是:FileSystemXmlApplicationContext、ClassPathXmlApplicationContext和AnnotataionConfigApplicationContext。如果在web应用中使用Spring容器,通常有XmlWebApplicationContext、AnnotatioinConfigWebApplicationContext两个实现类。
大部分的JavaEE应用,可以在启动WEB应用时自动加载ApplicationContext实例,接受Spring管理的Bean无须知道ApplicationContext的存在,一样可以利用ApplicationContext的管理。对于独立的应用程序,也可通过如下方法来实例化BeanFactory。
1、
//搜索当前文件路径下的beans.xml文件创建Resource对象
InputStreamResource isr = new FileSystemResource(“beans.xml”);
//以Resource对象作为参数,创建BeanFactory对象
XmlBeanFactory factory = new XmlBeanFactory(isr);
或者采用:
2、
//搜索类加载路径,以类加载路径下的beans.xml文件创建Resource对象
ClassPathResource res = new ClassPathResource(“beans.xml”);
//以Resource对象作为参数,创建BeanFactory对象
XmlBeanFactory factory = new XmlBeanFactory(res);
如果需要同时加载多个XML配置文件,则可以采用如下方式:
//搜索CLASSPATH路径,以CLASSPATH路径下的applicationContext.xml、Bean.xml、Service.xml文件创建ApplicationContext
ApplicationContext appContext = new ClassPathXmlApplicaation(new String[“beans.xml”,”service.xml”]);
ApplicationContext:
ApplicationContext是BeanFactory接口的子接口,它增强了BeanFactory的功能。
ApplicationContext允许以声明式方式操作容器,无须手动创建它。可利用如ContextLoader的支持类,在WEB应用启动时自动创建ApplicationContext。当前,也可以采用编程方式创建ApplicationContext.
BeanFactory与ApplicationContext实例化容器中Bean的时机不同,前者等到程序需要Bean实例时才创建,而后者在容器创建ApplicationContext实例时,会预初始化容器中的全部Bean。
因为采用ApplicationContext作为Spring容器,创建容器时会同时创建容器中所有singleton作用域Bean,因此可能需要更多的系统开销。但一旦创建成功,应用后面的响应速度就会更快,因此,对于普通的JavaEE应用,推荐使用ApplicationContext作为Spring容器。
实际上Spring允许singleton作用的Bean指定lazy-init=”true”,该属性将改变singleton Bean实例的默认行为,强制取消该Bean实例预初始化,则该Bean将不会随着ApplicationContext启动而预实例化。
Spring 容器的更多相关文章
- 一则spring容器启动死锁问题(DefaultListableBeanFactory/DefaultSingletonBeanRegistry)
线上发现一个问题,应用在启动时会卡死,log上并没有什么异常输出,初判应该是死锁问题. 抓现场的thread dump文件, 确实是有两个线程有deadlock问题. 线程一 "HSFBiz ...
- Spring容器深入(li)
spring中最常用的控制反转和面向切面编程. 一.IOC IoC(Inversion of Control,控制倒转).对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的 ...
- 通过单元测试理解spring容器以及dubbo+zookeeper单元测试异常处理
一.先说一个结论:单元测试与主项目的spring容器是隔离的,也就是说,单元测试无法访问主项目spring容器,需要自己加载spring容器. 接下来是代码实例,WEB主项目出于运行状态,单元测试中可 ...
- 同时使用Junit4的@Parameterized参数化测试和Spring容器
转载:http://www.jianshu.com/p/d191fe54915f 整合Spring容器 @SpringApplicationConfiguration(classes = Applic ...
- Spring-Context之四:Spring容器及bean的定义
Spring框架的核心功能之一就是控制反转(Inversion of Control, IoC),也叫做依赖注入(dependency injection, DI).关于依赖注入的具体内容可以参见Ma ...
- spring容器对bean生命周期的管理三中方式
spring容器对bean的生命周期管理主要在两个时间点:bean的初始化完成(包括属性值被完全注入),bean的销毁(程序结束,或者引用结束)方式一:使用springXML配置中的init-meth ...
- spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)转
关键字:spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) 应用场景:很多时候我们想要在某个类加载完毕时干某件事情,但是使用了spring管理对象,我们这个类引用 ...
- 整合Servlet到Spring容器
有时在Spring(3.2.5)项目中,如果使用到Servlet,可能希望Servlet实例作为bean受Spring容器管理,这样也能自动注入其他需要的bean,查了下,发现只针对过滤器提供了代理类 ...
- spring容器初始化执行某个方法
在做web项目开发中,尤其是企业级应用开发的时候,往往会在工程启动的时候做许多的前置检查. 比如检查是否使用了我们组禁止使用的Mysql的group_concat函数,如果使用了项目就不能启动,并指出 ...
随机推荐
- 设置TextBox控件的TextMode属性
我想在程式代碼中將TextBox控件的TextMode属性设置為Password,寫成TextBox1.TextMode=MultiLine和TextBox1.TextMode="Multi ...
- vba 笔记
1.PlanWS5.Range("D5:E13").Copy 复制PlanWS5.Range("G5:H13").PasteSpecial Paste:=x ...
- {POJ}{3897}{Maze Stretching}{二分答案+BFS}
题意:给定迷宫,可以更改高度比,问如何使最短路等于输入数据. 思路:由于是单调的,可以用二分答案,然后BFS验证.这里用优先队列,每次压入也要进行检查(dis大小)防止数据过多,A*也可以.好久不写图 ...
- javascript对象引用与赋值
avascript对象引用与赋值 <script type="text/javascript"> //例子一: 引用 var myArrayRef = new Arra ...
- ubuntu 16 mysql安装包安装 (推荐在线安装)
/etc/init.d/中的文件命名为mysql cp好各种文件后 ./mysql_install_db --user=mysql --datadir=/usr/local/mysql/data/my ...
- 在filter中使用spring的service bean
http://blog.csdn.net/godha/article/details/13025099
- R作图
R一般的散点图:plot() 折线图:plot() lines() 柱状图 barplot() 箱子图 boxplot() 直方图:hist() 热力图:heatmap 画地图的:拓展包 m ...
- char、varchar、nchar、nvarchar的区别
http://www.cnblogs.com/mekong/archive/2009/04/17/1437996.html
- POJ 1015 Jury Compromise 2个月后重做,其实这是背包题目
http://poj.org/problem?id=1015 题目大意:在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n个人作为陪审团的候选人,然后再从 ...
- flexbox布局
一.侧轴对齐伸缩项目--align-items 它充许调整伸缩项目在侧轴(也就是y轴)的对齐方式,主要包括以下几个值: flex-start/baseline:伸缩项目在侧轴起点边的外边距紧靠住该行在 ...