zoukankan      html  css  js  c++  java
  • 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)方法实现的。
  • 相关阅读:
    js window对象
    js 静态私有变量
    [WPF][ListBox]鼠标拖拽多选,(Shift Key、Ctrl Key多选有效)(转)
    GitLab关于SSH的使用
    Git命令--保存用户名和密码
    正则表达式
    WPF创建SignalR服务端(转)
    wpf学习之(IValueConverter)
    silverlight数据绑定模式TwoWay,OneWay,OneTime的研究
    WPF样式学习三
  • 原文地址:https://www.cnblogs.com/robbychan/p/3786761.html
Copyright © 2011-2022 走看看