BeanFactory 和 ApplicationContext的区别
今天在网上查资料无意中看到这一行代码
BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
平时用的是这个
ApplicationContext applicationcontext = new ClassPathXmlApplicationContext("applicationContext.xml");
这与平时学的稍微有点差别, 处于好奇, 便在网上看了看这两中写法有啥不一样的地方, 找了一些自己能理解的, 这些区别还不是很全, 以后再看
1).BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载 实例化,这样,我们就不能发现一些存在的Spring的配置问题。而ApplicationContext则相反,它是在容器启动时,一次性创建了所有的 Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误。
下面是不是很理解的:
原文引自:
http://blog.csdn.net/hi_kevin/article/details/7325554
1.利用MessageSource进行国际化
BeanFactory是不支持国际化功能的,因为BeanFactory没有扩展Spring中MessageResource接口。相反,由于
ApplicationContext扩展了MessageResource接口,因而具有消息处理的能力(i18N),具体spring如何使用国际
化,以后章节会详细描述。
2.强大的事件机制(Event)
基本上牵涉到事件(Event)方面的设计,就离不开观察者模式。不明白观察者模式的朋友,最好上网了解下。因为,这种模式在java开发中是比较常用的,又是比较重要的。
ApplicationContext的事件机制主要通过ApplicationEvent和ApplicationListener这两个接口来提供
的,和java
swing中的事件机制一样。即当ApplicationContext中发布一个事件的时,所有扩展了ApplicationListener的
Bean都将会接受到这个事件,并进行相应的处理。
Spring提供了部分内置事件,主要有以下几种:
ContextRefreshedEvent :ApplicationContext发送该事件时,表示该容器中所有的Bean都已经被装载完成,此ApplicationContext已就绪可用
ContextStartedEvent:生命周期 beans的启动信号
ContextStoppedEvent: 生命周期 beans的停止信号
ContextClosedEvent:ApplicationContext关闭事件,则context不能刷新和重启,从而所有的singleton bean全部销毁(因为singleton bean是存在容器缓存中的)
虽然,spring提供了许多内置事件,但用户也可根据自己需要来扩展spriong中的事物。注意,要扩展的事件都要实现ApplicationEvent接口。
3.底层资源的访问
ApplicationContext扩展了ResourceLoader(资源加载器)接口,从而可以用来加载多个Resource,而BeanFactory是没有扩展ResourceLoader
4.对Web应用的支持
与BeanFactory通常以编程的方式被创建不同的是,ApplicationContext能以声明的方式创建,如使用
ContextLoader。当然你也可以使用ApplicationContext的实现之一来以编程的方式创建ApplicationContext
实例 。
ContextLoader有两个实现:ContextLoaderListener和ContextLoaderServlet。
它们两个有着同样的功能,除了listener不能在Servlet 2.2兼容的容器中使用。自从Servelt
2.4规范,listener被要求在web应用启动后初始化。很多2.3兼容的容器已经实现了这个特性。使用哪一个取决于你自己,但是如果所有的条件都
一样,你大概会更喜欢ContextLoaderListener;关于兼容方面的更多信息可以参照ContextLoaderServlet的JavaDoc。
这个listener需要检查contextConfigLocation参数。如果不存在的话,它将默认使用/WEB-INF/applicationContext.xml。如果它存在,
它就会用预先定义的分隔符(逗号,分号和空格)分开分割字符串,并将这些值作为应用上下文将要搜索的位置。ContextLoaderServlet可以
用来替换ContextLoaderListener。这个servlet像listener那样使用contextConfigLocation参数。
5.其它区别
1).BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载
实例化,这样,我们就不能发现一些存在的Spring的配置问题。而ApplicationContext则相反,它是在容器启动时,一次性创建了所有的
Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误。
2).BeanFactory和ApplicationContext都支持BeanPostProcessor、
BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而
ApplicationContext则是自动注册
BeanFactory 和 ApplicationContext的区别的更多相关文章
- Spring中的BeanFactory和ApplicationContext的区别
我用一个例子去测试BeanFactory和ApplicationContext的区别 首先建立一个bean public class User { //声明无参构造,打印一句话,监测对象创建时机 pu ...
- BeanFactory和ApplicationContext的区别+部分Spring的使用
BeanFactory和ApplicationContext的区别 ApplicationContext 方式加载:创建容器的同时 容器初始化,容器所有的bean创建完毕 Spring容器中获取一 ...
- Spring中BeanFactory与ApplicationContext的区别
BeanFactory:Bean工厂接口,是访问Spring Bean容器的根接口,基本Bean视图客户端.从其名称上即可看出其功能,即实现Spring Bean容器的读取. ApplicationC ...
- BeanFactory和ApplicationContext的区别(Bean工厂和应用上下文)
https://blog.csdn.net/qq_20757489/article/details/88543252 https://blog.csdn.net/pythias_/article/de ...
- BeanFactory和ApplicationContext的区别
1.BeanFactory和ApplicationContext的异同点: 相同点: 两者都是通过xml配置文件加载bean,ApplicationContext和BeanFacotry相比 ...
- 面试还不知道BeanFactory和ApplicationContext的区别?
接口 BeanFactory 和 ApplicationContext 都是用来从容器中获取 Spring beans 的,但是,他们二者有很大不同 我看到过很多问 BeanFactory 和 App ...
- 【Spring】3、BeanFactory 和 ApplicationContext的区别
转自:http://blog.csdn.net/intlgj/article/details/5660587 在spring中,两个最基本最重要的包是 org.springframework.bean ...
- 4.BeanFactory和ApplicationContext的区别
ApplicationContext和BeanFactory都是用于加载Bean的, 但是二者之间存在区别, ApplicationContext能够提供更多的扩展功能. 1).BeanFactory ...
- beanfactory与applicationcontext的区别
ApplicationContext能够自动辨认和应用在其上部署的实现了BeanFactoryPostProcessor的bean 特性 Bean ...
随机推荐
- java实验二——输出一个指定整数的所有质因数
import java.util.Scanner; public class 实验二 { /** * @param args */ public static void main(String[] a ...
- [转]Oracle 中计算时间间隔的SQL 语句
' second as TSec from dual -- 计算 60秒 前的时间 ' minute as TMin from dual -- 计算 10分 前的时间 ' hour as UTCTim ...
- [转]SQL Server 中 Cast 与 Convert
两者都用于:将一种数据类型的表达式转换为另一种数据类型的表达式. 安装有 Sql Server 2008 时可以浏览:ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.zh-C ...
- [原]System.IO.Path.Combine 路径合并
使用 ILSpy 工具查看了 System.IO.Path 类中的 Combine 方法 对它的功能有点不放心,原方法实现如下: // System.IO.Path /// <summary&g ...
- webservice框架jersey 文章
webservice框架jersey简单总结 Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 ...
- shell 6基本运算符
shell支持多种运算符: * 算数运算符 * 关系运算符 * 布尔运算符 * 字符串运算符 * 文件测试运算符 算数运算符 + 加 `expr $a + $b` 结果为 30 - 减 `expr $ ...
- 样式学习--参照Oracle写法
#------------------------------------------------------------------------------- # Do not change the ...
- CentOS 7.3 CDH 5.10.0 Druid0.12.4安装记录
CentOS 7.3 CDH 5.10.0安装记录 0. 集群规划192.167.1.247 realtime247 realtime+hadoopdata192.167.1.248 broker24 ...
- php do while循环实例
do-while循环和while循环非常相似,其区别只是在于do-while保证必须执行一次,而while在表达式不成立时则可能不做任何操作. do-while 循环只有一种语法: do { stat ...
- Java集合类性能分析
[转]对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和Map这三大类的集合,今天Android吧(ard ...