BeanFactory和ApplicationContext详解

简介

Spring通过一份配置文件描述Bean与Bean之间的依赖关系,利用Java语言的反射功能实例化Bean并建立Bean之间的依赖关系。
Spring的IoC容器在完成这些底层工作的基础上,还提供了Bean实例缓存、生命周期管理、Bean实例代理、事件发布、资源装载等高级服务

区别

BeanFactory是Spring框架最核心的接口,它提供了高级IoC的配置机制。
ApplicationContext是建立在BeanFactory之上的,提供了更多面向应用的功能,它提供了国际化支持和框架事件体系,更易于创建应用
BeanFactory是Spring框架的基础设施,面向Spring本身,ApplicationContext面向使用Spring框架的应用开发者

BeanFactory

BeanFactory是一个类工厂,创建并管理各种类的对象
BeanFactory的初始化

  • 资源装载器装载资源配置文件(根据前缀动态选择合适的Resource实现类,然后生成对应的实例对象)得到Resource,然后XmlBeanDefinitionReader通过Resource装载Spring配置信息并启动IoC容器,然后通过getBean方法从IoC容器中获取Bean。
  • 通过BeanFactory启动IoC容器时,并不会初始化配置文件中定义的Bean,初始化动作发生在第一个调用时。
  • 对于单实例的Bean来说,BeanFactory会缓存Bean实例,所以第二次使用getBean方法调用时,是从IoC容器的缓存中直接取出的
  • Spring在DefaultSingletonBeanRegistry类中提供了一个用于缓存单实例Bean的缓存器,用HashMap实现,key为beanName
ApplicationContext
  • ApplicationContext由BeanFactory派生而来,提供了更多面向实际应用的功能,在BeanFactory中很多要以编程实现的功能,在ApplicationContext中可以通过配置的方式实现
  • ApplicationContext继承了ListableBeanFactory和HierarchicalBeanFactory这两个在BeanFactory中扩展的接口,除此之外还通过多个其他接口扩展BeanFactory的功能
  • ApplicationContext的主要实现类是ClassPathXmlApplicationContext和FileSystemXmlApplicationContext,前者是从类路径中加载配置文件,后者是从文件系统加载配置文件,

ApplicationContext初始化:
直接new ClassPathXmlApplicationContext/FileSystemXmlApplicationContext(路径名)
区别:ApplicationContext在初始化应用上下文时就实例化所有单实例的Bean,因此ApplicationContext初始化时间会比BeanFactory初始化时间长一些,不过稍后的调用就没有“第一次惩罚”的问题

Bean的配置方式
  • xml文件配置
  • 注解类配置
  • Groovy DSL进行Bean定义配置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值