2019独角兽企业重金招聘Python工程师标准>>>

BeanFacotry是spring中比较原始的Factory。如XMLBeanFactory就是一种典型的BeanFactory。原始的BeanFactory无法支持spring的许多插件,如AOP功能、Web应用等。 
   ApplicationContext接口,它由BeanFactory接口派生而来,因而提供BeanFactory所有的功能。ApplicationContext以一种更向面向框架的方式工作以及对上下文进行分层和实现继承,ApplicationContext包还提供了以下的功能: 
        • MessageSource, 提供国际化的消息访问 
        • 资源访问,如URL和文件 
        • 事件传播 
        • 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层 
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实例 。

5.其它区别 
  1).BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化,这样,我们就不能发现一些存在的Spring的配置问题。而ApplicationContext则相反,它是在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误。

2).BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册

转载于:https://my.oschina.net/yao00jun/blog/215642

spring 中beanFactory和ApplicationContext的区别相关推荐

  1. 请说明一下Spring中BeanFactory和ApplicationContext的区别是什么?

    请说明一下Spring中BeanFactory和ApplicationContext的区别是什么? BeanFactory: 是spring中比较原始,比较古老的Factory.因为比较古老,所以Be ...

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

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

  3. Spring中 BeanFactory 与 FactoryBean 的区别

    作者:叁滴水 blog.csdn.net/qq_30285985/article/details/115433099 文章目录 前言 为什么会有FactoryBean? 通过源码深入学习Factory ...

  4. Spring中BeanFactory和FactoryBean的区别

    先介绍一下Spring的IOC容器到底是个什么东西,都说是一个控制反转的容器,将对象的控制权交给IOC容器,其实在看了源代码之后,就会发现IOC容器只是一个存储单例的一个ConcurrentHashM ...

  5. BeanFactory和ApplicationContext的区别

    BeanFactory和ApplicationContext的区别 1.BeanFactory BeanFactory是Spring里面最底层的接口,提供了最简单的容器的功能,只提供了实例化对象和拿对 ...

  6. BeanFactory与ApplicationContext的区别

    BeanFactory与ApplicationContext的区别? 一.BeanFactory和ApplicationContext 接口及其子类图 二.概述 BeanFactory和Applica ...

  7. spring中ClassPathXmlApplication和FileSystemXmlApplicationContext使用区别

    spring中ClassPathXmlApplication和FileSystemXmlApplicationContext使用区别 ApplicationContext ac = new Class ...

  8. spring中@Inject和@Autowired的区别?分别在什么条件下使用呢?

    问题:spring中@Inject和@Autowired的区别?分别在什么条件下使用呢? 我在浏览SpringSource上的一些博客,在其他一个博客中,那个作者用了@Inject,但是我觉得他用@A ...

  9. 还不知道BeanFactory和ApplicationContext的区别?

    点击蓝色"程序猿DD"关注我哟 加个"星标",不忘签到哦 转载自公众号:日拱一兵 关注我,回复口令获取可获取独家整理的学习资料: - 001:领取<Spr ...

  10. Spring中@within与@target的区别

    区别 @within:定义在哪里,就作用在哪里.(有点静态编译的味道) @target:运行在哪里,就作用在哪里.(类比动态执行的感觉)@within,如果子类没有重写,在某个类上加一个注解,就会默认 ...

最新文章

  1. VC中的TRACE宏:
  2. 一键清除bios密码_电脑忘记开机密码?怎么才能开机使用
  3. 10个步骤的筛选器模式
  4. 织梦php添加函数调用,dedecms自定义函数及实际案例调用
  5. 右侧交易稳健获利的指标
  6. Bailian4104 单词翻转(POJ NOI0107-27)【堆栈+字符流】
  7. 【Nowcoder - 5666 H Minimum-cost Flow】2020牛客暑期多校训练营(第一场)【最小费用流变形】
  8. Java类的三大特性总结
  9. 气溶胶反演输入转化错误_暗目标法的Himawari-8静止卫星数据气溶胶反演
  10. python中的utils模块_Python中的模块及扩展库
  11. 数据结构python吕云翔_数据结构(PYTHON版)/吕云翔
  12. S参数三要素无源性(Passive),互易性(Reciprocoty)和因果性(Causality)
  13. 仿ipad页面html5,用HTML5实现iPad应用无限平滑滚动
  14. 如何提高深度学习预测准确率
  15. Android四大天王
  16. MATLAB判断是不是质数,MATLAB脚本质数的判断
  17. 结合源码看《我所理解的cocos2dx-3.0》—— 字体
  18. SSL握手过程实例抓包分析
  19. 详谈软件测试工程师的分级
  20. superIO在Linux下的设备,X86 Linux ITE SuperIO GPIO Control

热门文章

  1. 显示lib包_Java 添加、删除、移动、隐藏/显示Excel工作表
  2. sublime 如何使用less_【图文】5分钟可以学会在vue里使用sass?
  3. 店宝宝电脑版_母婴店主干货分享:母婴店利润究竟有多大?
  4. python基础: 序列
  5. 百度亮相NeurIPS 首届Expo:向世界科普了中国自动机器学习框架
  6. 数据库 Oracle监听实例详解
  7. 从程序详解拒绝服务攻击
  8. What is a TensorFlow Session?
  9. ubuntu 16.04 安装ftp服务
  10. 总结js中数据类型的bool值及其比较