Spring 中 ApplicationContext 、WebApplicationContext 和 BeanFactory 比较

SpringBeanWeb 框架配置管理  

BeanFactory 是 Bean 的工厂接口,用于生成管理不同类型的 java Bean 对象。

ApplicationContext 是建立在BeanFactory基础之上,提供了更多面向应用的功能。


根据两者的用途,我们可以进行简单的划分:
  BeanFactory 是 Spring 框架的基础设施,面向 Spring 本身;
  ApplicationContext 面向使用 Spring 框架的开发者,几乎所有的应用场合我们都直接使用 ApplicationContext 而非底层的 BeanFactory。


以下是两种创建 Bean 的不同方法:

Java代码  
  1. //用BeanFactory创建Bean实例  
    public static void main(String args[]){  
       Resource res=new ClassPathResource("com/beanfactory/beans.xml");  
       BeanFactory bf=new XmlBeanFactory(res);  
       Car car=(Car)bf.getBean("car");//得到一个Car Bean实例  
    }  
  2. //用ApplicationContext创建Bean实例 
    public static void main(String args[]){  
       ApplicationContext application = new ClassPathXmlApplicationContext(beans.xml"));  
       Car car=(Car)application.getBean("car");  
    } 
两者在加载Bean实例时的区别
BeanFactory被初始化的时候,并没有加载所有的单实例Bean对象,而是等到调用getBean()方法的时候才初始化相应的Bean实例对象。
ApplicationContext被初始化的时候就已经检查所有的Bean对象并初始化,当调用getBean()方法的时候,直接可以从缓存中取出相应的Bean实例对象。
ApplicationContext这种加载方式特点:

在刚开始加载ApplicationContext对象的时候,会出现一点延迟,但以后加载每一个Bean对象的时候会很快。而且在刚开始的时候就对Bean对象进行配置校验,以防止加载出错。

WebApplicationContext是实现ApplicationContext接口的子类。是专门为WEB应用准备的,它允许从相对于Web根目录的路径中加载配置文件完成初始化工作。从WebApplicationContext中可以获取ServletContext引用,整个Web应用上下文对象将作为属性放置在ServletContext中以便Web应用环境可以访问Spring上下文。
同时WebApplicationContext还为Bean提供了三个新的作用域,request、session和globalsession。而在非web环境下,Bean只有singleton和prototype两种作用域。
WebApplicationContext的初始化是通过WebApplicationContextUtils类中的getApplicationContext(ServletContext sc)方法实现的。
posted @ 2014-06-01 15:16  小尼人00  阅读(249)  评论(0编辑  收藏  举报