作用:1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的声明周期。

2. ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能:

a. 国际化支持
                       b. 资源访问:Resource rs = ctx. getResource(“classpath:config.properties”), “file:c:/config.properties”
                       c. 事件传递:通过实现ApplicationContextAware接口
                 3. 常用的获取ApplicationContext的方法:
                 FileSystemXmlApplicationContext:从文件系统或者url指定的xml配置文件创建,参数为配置文件名或文件名数组
                 ClassPathXmlApplicationContext:从classpath的xml配置文件创建,可以从jar包中读取配置文件
                WebApplicationContextUtils:从web应用的根目录读取配置文件,需要先在web.xml中配置,可以配置监听器或者servlet来实现
              <listener>
              <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
             </listener>
            <servlet>
            <servlet-name>context</servlet-name>
            <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
           <load-on-startup>1</load-on-startup>
             </servlet>
这两种方式都默认配置文件为web-inf/applicationContext.xml,也可使用context-param指定配置文件
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/myApplicationContext.xml</param-value>
</context-param>

Spring的IoC容器就是一个实现了BeanFactory接口的可实例化类。事实上,Spring提供了两种不同的容器:一种是最基本的BeanFactory,另一种是扩展的ApplicationContext。BeanFactory 仅提供了最基本的依赖注入支持,而 ApplicationContext 则扩展了BeanFactory ,提供了更多的额外功能。实例化这两种容器时是有区别的:
public class BeanFactoryTest {public static void main(String[] args) throws Throwable{ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();Resource res = resolver.getResource("classpath:com/baobaotao/beanfactory/beans.xml");System.out.println(res.getURL());BeanFactory bf = new XmlBeanFactory(res);System.out.println("init BeanFactory.");Car car = bf.getBean("car",Car.class);System.out.println("car bean is ready for use!");car.introduce();}
}

public class XmlApplicationContextTest {public static void main(String[] args) {        //如果配置文件放置在类路径下,用户可以优先使用ClassPathXmlApplicationContext实现类ApplicationContext ctx = new ClassPathXmlApplicationContext("com/baobaotao/context/*.xml");Car car1 = ctx.getBean("car",Car.class);  //如果配置文件放置在文件系统的路径下,则可以优先考虑使用FileSystemXmlApplicationContext实现类
//        ctx = new FileSystemXmlApplicationContext("D:/masterSpring/chapter3/src/com/baobaotao/context/*.xml");
//        Car car2 = ctx.getBean("car",Car.class);}
}

ApplicationContext的初始化和BeanFactory有一个重大的区别:BeanFactory在初始化容器时,并未实例化Bean,直到第一次访问某个Bean时才实例目标Bean;而ApplicationContext则在初始化应用上下文时就实例化所有的单实例的Bean。因此ApplicationContext的初始化时间会比BeanFactory稍长一些.

转载于:https://www.cnblogs.com/DreamDrive/p/4094502.html

spring中的BeanFactory与ApplicationContext的作用和区别?相关推荐

  1. 浅谈Spring中的BeanFactory与FactoryBean

    前言 理解FactoryBean是非常非常有必要的,因为在Spring中FactoryBean最为典型的一个应用就是用来创建AOP的代理对象,不仅如此,而且对理解Mybatis核心源码也非常有帮助!如 ...

  2. [读书笔记]Spring中BeanFactory和ApplicationContext的联系和区别

    写在前言 依赖反转是指依赖对象的获得被反转了.依赖控制反转的实现有很多方式,Spring中IOC容器是实现这个模式的载体,它可以在对象生成或初始化时直接将数据注入到对象中,也可以通过将对象引用注入到对 ...

  3. Spring系列之beanFactory与ApplicationContext

    一.BeanFactory BeanFactory 是 Spring 的"心脏".它就是 Spring IoC 容器的真面目.Spring 使用 BeanFactory 来实例化. ...

  4. Spring:Spring容器(BeanFactory和ApplicationContext)

    Spring的IoC容器是一个提供IoC支持的轻量级容器,IoC容器为管理对象之间的依赖关系提供了基础功能.Spring为我们提供了两种容器:BeanFactory和ApplicationContex ...

  5. java悲观者不加事务_在spring中,使用事务和不用事务的区别

    各位高手大家好,我最近在学习Spring,自己也作了几个例子.但我在开发的过程中发现我使用事务和不使用事务效果都一样,我想问一下两者的区别,谢谢大家:第一种,不使用事务,Spring... 各位高手大 ...

  6. Spring IoC容器:BeanFactory和ApplicationContext谁才是Spring IoC容器

    private static void whoIsIoCContainer(UserRepository userRepository, ApplicationContext applicationC ...

  7. Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系

    在我们日常的开发中,我们经常会用到Filter和Interceptor.有时同一个功能.Filter可以做,Interceptor也可以做.有时就需要考虑使用哪一个比较好.这篇文章主要介绍一下,二者的 ...

  8. Spring中Model、ModelMap及ModelAndView之间的区别

    1. Model(org.springframework.ui.Model) Model是一个接口,包含addAttribute方法,其实现类是ExtendedModelMap. ExtendedMo ...

  9. spring中的前置处理器和后置处理器区别

    背景: SpringIOC容器它会以某种方式,加载配置文件中的 信息,将其解析为一个个的BeanDefinition.之后将BeanDefinition注册到容器之中.Spring IOC容器在实现的 ...

最新文章

  1. BP as a Vendor and Customer Configuration
  2. Tomcat介绍及性能优化
  3. 一个简单的第三方CNN自编码matlab工具箱
  4. Linux引导过程详解
  5. append有时加载不出来_关于艾拉浏览器看漫画,有时加载慢的解决方法,你知道了吗...
  6. 摔跤视频软件测试,Apple Watch 4摔倒检测立功:成功救人一命,网友:马上入手!...
  7. html js脚本限制 正则,简单谈谈JS中的正则表达式
  8. 成为Java流大师–第4部分:数据库流
  9. 【建议珍藏系列】如果你这样回答「什么是线程安全」,面试官都会对你刮目相看!...
  10. C#LeetCode刷题之#819-最常见的单词(Most Common Word)
  11. r语言degseq2_第二次RNA-seq实战总结(3)-用DESeq2进行基因表达差异分析
  12. 怎么用 Photoshop 把图片变清晰?
  13. 坦克世界因计算机丢失,坦克世界新版本上线在即,玩家必须知道的几件事。
  14. (20200328已解决)[dockerfile] debconf: delaying package configuration, since apt-utils is not installed
  15. win10计算机打开速度慢,win10电脑速度突然很慢怎么处理
  16. 关于计算机的论文英语2000字,英语论文2000字左右
  17. 4步用Python搞定客户细分!
  18. 基于51单片机的万年历(包含闹钟,秒表)实现
  19. GeoPandas库入门教程
  20. 问题解决-----如何从windows10向ubuntu传输大数据的文件(大于等于50M)

热门文章

  1. 记忆化搜索,FatMouse and Cheese
  2. Web UI 自动化测试环境搭建 (转载自51测试天地第三十九期上)
  3. UVA - 11732 strcmp() Anyone?左兄弟右儿子trie
  4. 花点时间了解消息,句柄和窗口
  5. 全国计算机等级考试题库二级C操作题100套(第41套)
  6. 粒子文字特效css,CSS3 粒子效果
  7. php获取flash上传视频文件大小,php解析flash文件(.swf文件)获取其长度和宽度
  8. 成为优秀程序员应该具备的8个特质
  9. 浅谈 MySQL 中优化 SQL 语句查询常用的 30 种方法
  10. .NET开源项目小功能组件