理解Spring容器、BeanFactory和ApplicationContext

本文详细介绍了Spring容器的核心概念,包括BeanFactory和ApplicationContext的关系,它们的功能区别,以及各自的使用场景,如BeanFactory的简单DI功能和ApplicationContext的企业级服务特性。同时涵盖了启动行为、功能扩展和不同实现类的特点。
摘要由CSDN通过智能技术生成

一、Spring容器理解

Spring容器可以理解为生产对象的地方,在这里容器不只是帮我们创建了对象那么简单,它负责了对象的整个生命周期-创建、装配、销毁。而这里对象的创建管理的控制权都交给Spring容器,所以这是一种控制权的反转,成为IOC容器。

二、BeanFactory和ApplicationContext之间的关系

1、BeanFactory和ApplicationContext是Spring的两大核心接口,而其中ApplicationContext是BeanFactory的子接口。它们都可以当做Spring的容器,Spring容器是生成Bean实例的工厂,并管理容器中的Bean。在基于Spring的Java EE应用中,所有的组件都被当成Bean处理,包括数据源,Hibernate的SessionFactory、事务管理器等。

2、Spring的核心是容器,而容器并不唯一,框架本身就提供了很多个容器的实现,大概分为两种类型:

  • 一种是不常用的BeanFactory,这是最简单的容器,只能提供基本的DI功能;
  • 一种就是继承了BeanFactory后派生而来的ApplicationContext(应用上下文),它能提供更多企业级的服务,例如解析配置文本信息等等,这也是ApplicationContext实例对象最常见的应用场景。

三、BeanFactory介绍

Spring容器最基本的接口就是BeanFactory。BeanFactory负责配置、创建、管理Bean,它有一个子接口ApplicationContext,也被称为Spring上下文,容器同时还管理着Bean和Bean之间的依赖关系。

BeanFactory结构图:

接口介绍:

1.BeanFactory接口:
 是Spring bean容器的根接口,提供获取bean,是否包含bean,获取bean类型,bean 别名的方法 。它最主要的方法就是getBean(String beanName)。
2.BeanFactory的三个子接口:

  •  HierarchicalBeanFactory:提供父容器的访问功能
  •  ListableBeanFactory:提供了批量获取Bean的方法
  •  AutowireCapableBeanFactory:这个接口扩展了BeanFactory,并添加了自动装配bean属性的功能。

3.ConfigurableBeanFactory:
主要单例bean的注册,生成实例,以及统计单例bean
4.ConfigurableListableBeanFactory:
继承了上述的所有接口,增加了其他功能:比如类加载器,类型转化,属性编辑器,BeanPostProcessor,作用域,bean定义,处理bean依赖关系, bean如何销毁…
5.实现类DefaultListableBeanFactory:
实现了ConfigurableListableBeanFactory,实现上述BeanFactory所有功能。它还可以注册BeanDefinition

四、ApplicationContext介绍

ApplicationContext是BeanFactory的子接口,由BeanFactory派生而来,通常成为Spring上下文,具有BeanFactory的基本功能。

此外,ApplicationContext扩展了BeanFactory接口的功能

  • 国际化
  • 通配符方式获取一组 Resource 资源
  • 整合 Environment 环境(能通过它获取各种来源的配置信息)
  • 事件发布与监听,实现组件之间的解耦

ApplicationContext常用实现类作用
AnnotationConfigApplicationContext从一个或多个基于java的配置类中加载上下文定义,适用于java注解的方式。
ClassPathXmlApplicationContext从类路径下的一个或多个xml配置文件中加载上下文定义,适用于xml配置的方式。
FileSystemXmlApplicationContext从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是说系统盘符中加载xml配置文件。
AnnotationConfigWebApplicationContext专门为web应用准备的,适用于注解方式。
XmlWebApplicationContext从web应用下的一个或多个xml配置文件加载上下文定义,适用于xml配置方式。

五、BeanFactory与ApplicationContext的区别

1、功能上

BeanFactory是Spring的最底层接口,定义了IOC的基本功能,包含:各种Bean的定义、加载、实例化、依赖注入以及生命周期的管理。ApplicationContext接口继承了BeanFactory,除了提供BeanFactory所具有的基本功能以外,它还提供了更完整的框架功能:他还继承MessageSource,因此还支持国际化,资源文件访问等功能;

2、加载形式

BeanFactory在初始化容器的时候,并未实例化Bean,直到需要使用某个Bean(调用getBean()方法) 时才实例目标Bean,导致不能及时发现可能存在的一些配置上的问题。

ApplicationContext 则在初始化应用上下文时就实例化所有单实例的Bean,我们可以及时的发现配置中有可能存在的问题;由于ApplicationContext启动后加载了所有的单实例Bean,所以运行时速度比较快;唯一的不足在于它占用内存空间,配置的Bean较多时,启动会比较慢。

  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值