首页 > 其他分享 >BeanFactory与ApplicationContext的区别

BeanFactory与ApplicationContext的区别

时间:2023-04-01 20:13:18浏览次数:37  
标签:ApplicationContext beanFactory Spring 区别 Bean BeanFactory 加载

 

 BeanFactory与ApplicationContext的区别?

一、BeanFactory和ApplicationContext 接口及其子类图

编辑

二、概述

BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext是BeanFactory的子接口。

BeanFactory:

BeanFactory是Spring里面最底层的接口,是Ioc的核心,定义了Ioc的基本功能,包含了各种Bean的定义、加载、实例化,依赖注入和生命周期管理;

ApplicationContext

ApplicationContext接口作为BeanFactory的子类,除了提供BeanFactory所具有的功能外,还提供了更完整的框架功能:
①继承MessageSource,因此支持国际化
②资源文件访问,如URL和文件(ResourceLoader)
③载入多个(有继承关系)上下文(及同时加载多个配置文件),使得每一个上下文都专注于一个特定的层次
④提供在监听器中注册bean的事件;

三、二者区别 1.BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化,这样,我们就不能发现一些存在的Spring的配置问题。而ApplicationContext则相反,它是在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误。 相对于基本的BeanFactory,ApplicationContext 唯一的不足是占用内存空间。当应用程序配置Bean较多时,程序启动较慢。

BeanFacotry延迟加载,如果Bean的某一个属性没有注入,BeanFacotry加载后,直至第一次使用调用getBean方法才会抛出异常;而ApplicationContext则在初始化自身是检验,这样有利于检查所依赖属性是否注入;所以通常情况下我们选择使用 ApplicationContext。应用上下文则会在上下文启动后预载入所有的单实例Bean。通过预载入单实例bean ,确保当你需要的时候,你就不用等待,因为它们已经创建好了。

2.BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册。(Applicationcontext比 beanFactory 加入了一些更好使用的功能。而且 beanFactory 的许多功能需要通过编程实现而 Applicationcontext 可以通过配置实现。比如后处理 bean , Applicationcontext 直接配置在配置文件即可而 beanFactory 这要在代码中显示的写出来才可以被容器识别。 )

3.beanFactory主要是面对与 spring 框架的基础设施,面对 spring 自己。而 Applicationcontex 主要面对与 spring 使用的开发者。基本都会使用 Applicationcontex 并非 beanFactory 。

四、总结 因此,在实际开发中,通常都选择使用 ApplicationContext,而只有在系统资源较少时,才考虑使用 BeanFactory。  

 

标签:ApplicationContext,beanFactory,Spring,区别,Bean,BeanFactory,加载
From: https://www.cnblogs.com/2324hh/p/17279247.html

相关文章

  • BeanFactory与ApplicationContext的区别
    BeanFactory与ApplicationContext的区别?一、BeanFactory和ApplicationContext接口及其子类图 二、概述BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext是BeanFactory的子接口。BeanFactory:BeanFactory是Spring......
  • np.array和np.ndarry 的区别
    np.array和np.ndarray都是NumPy中用于创建多维数组的函数。np.ndarray是NumPy中的多维数组类,它是一种可变的数组,可以通过修改数组中的元素来改变其内容。使用np.ndarray创建的数组必须指定形状、元素类型和存储器位置等参数。例如,可以使用以下代码创建一个2x2的整数数组:a=np.n......
  • 3·1HTTP协议特点、3·2详解URL与URI的区别与联系、3·3HTTP报文结构分析、3·4HTTP请
     HTTP协议特点支持客户/服务器模式客户/服务器模式工作的方式是由客户端向服务器发出请求,服务器端响应请求,并进行相应服务简单快速 客户端向服务器请求服务时,只需传输请求方法和路径 请求方法常用的有GET、HEAD、POST。每种方法规......
  • HTTP协议特点&详解UR与URL的区别与联系
    HTTP协议特点支持客户/服务器模式客户/服务器模式工作的方式是由客户端向服务器发送请求,服务器端响应请求,并进行相应服务   简单快速客户向服务器请求服务时,只需传送请求方法和路径请求方法常用的有GET,HEAD,POST。每种方法规定了客户与服务器练习的......
  • C# Environment.CurrentDirectory和AppDomain.CurrentDomain.BaseDirectory的区别
    Environment.CurrentDirectory和AppDomain.CurrentDomain.BaseDirectory都是C#中用于获取当前应用程序的目录路径的方法,但是它们的用途和行为是不同的。Environment.CurrentDirectory返回的是当前进程的当前工作目录路径,这通常是启动应用程序的目录。如果在启动时没有指定工......
  • Oracle与Mysql 的区别(对比学习)
    Oracle与Mysql的区别(对比学习)使用范围Oracle是大型的数据库。Oracle是收费的,且价格昂贵Mysql是中小型数据库。Mysql是开源的安装部署Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能Mysql安装完后才152M端口用户Oracle默认端口1521,默认用户是s......
  • 每日一练 for循环 、break 加括号和不加括号的区别 break跳出循环
    题目我的答案是246答案是错的正确答案是2,4因为5的时候已经跳出去了还有括号以及那个静态变量很容易误导break是直接跳出循环了所以是2、4没有6了......
  • 阶段小结:批量删除的时候使用 this.id的详解、jquery里面的$(this)和this的区别、面试
    this.id指的是当前对象的id比如我点击了button那么此button按钮的id就可以用this.id文章目录this.id指的是当前对象的id比如我点击了button那么此button按钮的id就可以用this.id我们先看项目里面方式1:利用样式,可以隐藏,但是不推荐方式二主角this.id方式:给点击删除的时候......
  • 项目一众筹网05_01_[树形结构开发]菜单维护-树形结构基础知识、自关联、zTree的介绍和
    树形结构开发]菜单维护文章目录树形结构开发]菜单维护01-菜单维护-树形结构基础知识-上==在数据库中怎么去表示树形关系====其实这就是自关联====我们怎么识别根节点==02-菜单维护-树形结构基础知识-下03-页面显示树形结构-后端-逆向工程==开发的细节:如何避免空指针异常:初始化==04-......
  • @AutoWired和@Resource有什么区别
    @Autowired和@Resource都是用于进行依赖注入的注解,但是它们有以下几个区别:来源不同:@Autowired是Spring提供的注解,而@Resource是JavaEE提供的注解,不过Spring也支持使用@Resource进行依赖注入。默认依赖查找方式不同:@Autowired默认使用类型匹配的方式进行依赖查找和......