怎样描述BeanFactory与ApplicationContext的关系?

BeanFactory是Spring的早期接口,称为Spring的Bean工厂,ApplicationContext是后期更高级接口,称之为Spring 容器;

ApplicationContext在BeanFactory基础上对功能进行了扩展,例如:监听功能、国际化功能等。BeanFactory的API更偏向底层,ApplicationContext的API大多数是对这些底层API的封装;

Bean创建的主要逻辑和功能都被封装在BeanFactory中,ApplicationContext不仅继承了BeanFactory,而且

ApplicationContext内部还维护着BeanFactory的引用,所以,ApplicationContext与BeanFactory既有继承关系,又有融合关系。

Bean的初始化时机不同,原始BeanFactory是在首次调用getBean时才进行Bean的创建,而ApplicationContext则是配置文件加载,容器一创建就将Bean都实例化并初始化好。

ApplicationContext除了继承了BeanFactory外,还继承了ApplicationEventPublisher(事件发布器)、ResouresPatternResolver(资源解析器)、MessageSource(消息资源)等。但是ApplicationContext的核心功能还是BeanFactory。

BeanFactory与ApplicationContext的关系图如下:

怎样描述BeanFactory与ApplicationContext的关系?

applicationContext内部维护着beanFactory的引用,在学习过程中会查看beanFactory内部维护的属性,断点查看如下图示内容的。

怎样描述BeanFactory与ApplicationContext的关系?

验证BeanFactory和ApplicationContext对Bean的初始化时机,在UserDaoImpl的无参构造内打印一句话,验证构造方法的执行时机。

public class UserDaoImpl implements UserDao {    public UserDaoImpl() {        System.out.println("UserDaoImpl创建了...");    }}

断点观察,BeanFactory方式时,当调用getBean方法时才会把需要的Bean实例创建,即延迟加载;而 ApplicationContext是加载配置文件,容器创建时就将所有的Bean实例都创建好了,存储到一个单例池中,当调用getBean时直接从单例池中获取Bean实例返回。

文章来源于:王晴儿网页设计博客 欢迎分享交流,转载请注明出处

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/262442.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
黑马程序员黑马程序员订阅用户
上一篇 2023年5月8日 01:08
下一篇 2023年5月8日 01:08

相关推荐

  • Python中怎样选择正确的可视化图表?

    数据可视化的图表类型十分丰富,好的图表可以有效、清晰地呈现数据的信息。对于用户而言,选择正确的图表是十分关键的,不仅可以达到“一图胜千言”的效果,而且会直接影响分析的结果。用户选择正确的数据可视化图表…

    2023年5月6日 编程分享
    02
  • feign动态设置数据源(https请求)

    1、背景在使用springboot-feign/spingcloud-feign时,需要在启动springboot的时候,注入的方式将feigncofing配置好,也就是说项目启动以后只能有一个数据源,且不能修改,在网上找了很多资料没有找到解决方案(网上…

    2023年5月10日
    03
  • Activity生命周期的三种状态

    生命周期就是一个对象从创建到销毁的过程,每一个对象都有自己的生命周期。同样,Activity也具有相应的生命周期,Activity的生命周期中分为三种状态,分别是运行状态、暂停状态和停止状态。接下来将针对Activity生…

    2023年5月6日
    021
  • hashmap是否线程安全?

    一、糟糕的面试面试官:小王,你说说HashMap的是线程安全的吗?小王:HashMap不安全,在多线程下,会出现线程安全问题。他兄弟HashTable线程是安全的,但是出于性能考虑,我们往往会选择ConcurrentHashMap。面试官…

    2023年5月12日 编程分享
    013
  • Java中有哪些运算符?

    运算符是对常量或者变量进行操作的符号,Java的运算符有六类:算数运算符、赋值运算符、自增自减运算符、关系运算符、逻辑运算符,三元运算符、用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式…

    2023年5月13日 编程分享
    00
  • I/O流详解

    I/O(Input/Output)流,即输入/输出流,是Java中实现输入/输出的基础,它可以方便地实现数据的输入/输出操作。I/O流有很多种,按照不同的分类方式,可以分为以下三类:1.字节流和字符流根据流操作的数据单位的不…

    2023年5月13日
    010
  • 9月编程排行榜新鲜出炉!霸榜还得是它

    Tiobe编程排行榜可能会迟到,但不会缺席,各大编程语言在9月有什么变化呢?跟播妞一睹为快:9月Tiobe编程排行榜前20名9月Tiobe编程排行榜Top10趋势素材来源:https://www.tiobe.com/tiobe-index/,如侵删在上个月,…

    2023年5月12日 编程分享
    03
  • Java开发常见英语词汇汇总,零基础的快来先背词汇啊

    小编汇总了常用的Java常用名词中英对照,闲来无事可以看看自己认识多少?需要补充哪些常识?A.array数组 add 增加 accessible 可存取的 area面积 audio音频 addition加法 action 行动 arithmetic 算法 adjustment …

    2023年5月16日
    01

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息