Spring--ApplicationContext和BeanFactory区别

12 篇文章 0 订阅
ApplicationContext和BeanFactory区别


一、BeanFactory是Spring中Bean管理的核心类之一,ApplicationContext为应用程序提供配置的核心接口。
一个ApplicationContext提供以下功能:
a、继承 Bean工厂方法来实现Bean管理,继承自org.springframework.beans.factory.ListableBeanFactory;

b、继承org.springframework.core.io.ResourceLoader实现资源加载;使用方法如下:

ApplicationContext context = new FileSystemXmlApplicationContext("config.xml"); 
Resource reource = context.getResource("classpath:message.properties"); 

c、继承ApplicationEventPublisher实现发布注册事件监听器,即告诉所有注册的事件监听器发生了某事件;源码如下:
public interface ApplicationEventPublisher {


	/**
	 * Notify all listeners registered with this application of an application
	 * event. Events may be framework events (such as RequestHandledEvent)
	 * or application-specific events.
	 * @param event the event to publish
	 * @see org.springframework.web.context.support.RequestHandledEvent
	 */
	void publishEvent(ApplicationEvent event);


}

d、继承MessageSource实现Property信息加载,并且支持国际化;典型用法是通过.Property文件设置数据源信息
e、提供的上下文环境可以被整个Web应用程序使用,并且为每个Servlet提供上下文无关的独立上下文;
f、ApplicationContext还可以通过Aware接口实现生命周期管理功能,如ResourceLoaderAware,ApplicationEventPublisherAware等。其实就是注册一些回调函数,bean可以通过回调方法了解生命周期中的一些环境信息。如bean继承BeanFactoryAware就能通过对应的方法知道是哪个BeanFactory实例化的。


二、对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参数。

三、其它区别  
  a.BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化,这样,我们就不能发现一些存在的Spring的配置问题。而ApplicationContext则相反,它是在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误。 
  b.BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值