我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何初始化容器与DefaultListableBeanFactory

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何初始化容器与DefaultListableBeanFactory

本篇内容介绍了“如何初始化容器与DefaultListableBeanFactory”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1入口

从 JavaConfig 中加载配置的 AnnotationConfigApplicationContext 启动方式如下:

如何初始化容器与DefaultListableBeanFactory

进去之后发现构造其实是调用的当前无参构造。

如何初始化容器与DefaultListableBeanFactory

所以在启动时也可以直接声明无参构造,改写为下面这种:

public class AnnotationConfigApplicationTest {   public static void main(String[] args) {    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();    context.register(JavaConfig.class);   context.refresh();    System.out.println(context.getBean(UserComponent.class));   } }

今天就研究研究无参构造这一部分究竟做了什么逻辑!

无参构造

如何初始化容器与DefaultListableBeanFactory

其中的 StartupStep 是 5.3 新增的类,看代码注释的意思是:表示用来记录启动过程中的一些指标信息等。暂时不做研究。

主要研究红框部分!注意,这一块并不代表只有红框部分!

如何初始化容器与DefaultListableBeanFactory

因为 AnnotationConfigApplicationContext  继承了GenericApplicationContext,所以会先执行父类的构造方法。

如何初始化容器与DefaultListableBeanFactory

所以这里会创建一个 DefaultListableBeanFactory 的容器。

DefaultListableBeanFactory

如何初始化容器与DefaultListableBeanFactory


DefaultListableBeanFactory UML

虽然说 Spring 的 BeanFactory 定义了容器的基础概念、接口方法等,但是 DefaultListableBeanFactory  才是一个真正可以 new 出来的具体的容器,当然也可以暂且称之为 bean 工厂。

下面来看一下 DefaultListableBeanFactory 里面都有什么?

如何初始化容器与DefaultListableBeanFactory

在 DefaultListableBeanFactory 里面会初始化很多参数,其中重点关注的是下面两个参数:

 // BeanDefinition 的存储 Map 其中 key 为 beanName private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);   // BeanName 的集合 private volatile List<String> beanDefinitionNames = new ArrayList<>(256);

其中 BeanDefinition 描述了一个 bean 实例,该实例具有属性值,构造函数参数值以及具体实现所提供的更多信息。

对应的 beanDefinitionMap 就是存储的初始化的 beanName 和 BeanDefinition。

至于 BeanDefinition 具体内容,下一节再做介绍。

2.总结

通过上面的阅读,可以在初始化流程中增加一部分模块,即实例化 DefaultListableBeanFactory

如何初始化容器与DefaultListableBeanFactory

再回顾一下 DefaultListableBeanFactory 的概念。

ConfigurableListableBeanFactory 和 BeanDefinitionRegistry  接口的默认实现:基于bean定义元数据的成熟bean工厂,可通过后处理器进行扩展。重点需要把握的是 DefaultListableBeanFactory  内部定义了 BeanDefinition 的 Map。

“如何初始化容器与DefaultListableBeanFactory”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何初始化容器与DefaultListableBeanFactory

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Spring容器初始化register与refresh方法是什么

这篇文章主要讲解了“Spring容器初始化register与refresh方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring容器初始化register与refresh方法是
2023-07-02

eclipse如何初始化

要初始化Eclipse,您可以按照以下步骤操作:1. 下载并安装Eclipse:首先,您需要从Eclipse官方网站下载适合您操作系统的Eclipse安装程序,并按照安装向导的指示进行安装。2. 启动Eclipse:安装完成后,您可以在计算
2023-08-29

Servlet如何初始化

这篇文章主要为大家展示了“Servlet如何初始化”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Servlet如何初始化”这篇文章吧。有时候,我们需要仅仅是在服务启动,而非其他更为复杂的定时任务
2023-06-17

win10如何初始化

这篇文章主要介绍“win10如何初始化”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“win10如何初始化”文章能帮助大家解决问题。1、首先点击左下角开始菜单,打开“设置” 2、接着进入其中“更新和安
2023-07-02

Hibernate如何初始化

小编给大家分享一下Hibernate如何初始化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Hibernate有两种配置文件格式,一种是XML,默认为hibern
2023-06-17

C++中怎么初始化vector容器

C++中怎么初始化vector容器,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、STL的基本概念STL(Standard Template Library)标准模板库大
2023-06-20

ArrayList初始化容量的问题如何解决

这篇“ArrayList初始化容量的问题如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ArrayList初始化容量的
2023-07-05

spring容器启动如何实现初始化某个方法

小编给大家分享一下spring容器启动如何实现初始化某个方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、前言很多时候,我们需要在项目启动的时候,就要完成某些
2023-06-20

java如何初始化数组

什么是初始化在Java程序开发中,使用数组之前都会对其进行初始化,这是因为数组是引用类型,声明数组只是声明一个引用类型的变量,并不是数组对象本身,只要让数组变量指向有效的数组对象,程序中就可使用该数组变量来访问数组元素。 (推荐学习:java课程)所谓数组
java如何初始化数组
2017-08-16

win7如何初始化电脑

这篇文章主要介绍“win7如何初始化电脑”,在日常操作中,相信很多人在win7如何初始化电脑问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”win7如何初始化电脑”的疑惑有所帮助!接下来,请跟着小编一起来学习吧
2023-07-01

win7如何初始化硬盘

本文小编为大家详细介绍“win7如何初始化硬盘”,内容详细,步骤清晰,细节处理妥当,希望这篇“win7如何初始化硬盘”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。win7初始化硬盘的操作步骤:1、右键计算机,选择
2023-07-01

java数组如何初始化

Java语言中数组必须先初始化,然后才可以使用。所谓初始化就是为数组的数组元素分配内存空间,并为每个数组元素附初始值。注意:数组完成初始化后,内存空间中针对该数组的各个元素就有个一个默认值:基本数据类型的整数类型(byte、short、int、long)默认值
java数组如何初始化
2020-04-23

java 如何初始化数组

一、什么是初始化在Java程序开发中,使用数组之前都会对其进行初始化,这是因为数组是引用类型,声明数组只是声明一个引用类型的变量,并不是数组对象本身,只要让数组变量指向有效的数组对象,程序中就可使用该数组变量来访问数组元素。所谓数组初始化就是让数组名指向数组对
java 如何初始化数组
2018-10-10

如何初始化常量CLSID

要初始化常量CLSID,可以按照以下步骤进行操作:1. 打开Visual Studio或其他支持COM开发的集成开发环境(IDE)。2. 创建一个新的C++项目。3. 在项目中创建一个新的头文件,可以命名为“Constants.h”或其他合
2023-09-26

java数组如何初始化?

Java语言中数组必须先初始化,然后才可以使用。所谓初始化就是为数组的数组元素分配内存空间,并为每个数组元素附初始值。注意:数组完成初始化后,内存空间中针对该数组的各个元素就有个一个默认值: ● 基本数据类型的整数类型(byte、short、int、long)
java数组如何初始化?
2018-03-13

js如何初始化数组

这篇文章给大家分享的是有关js如何初始化数组的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。初始化数组如果想要初始化一个指定长度的一维数组,并指定默认值,可以这样:const array = Array(6).fi
2023-06-17

java中如何初始化MediaRecorder

小编给大家分享一下java中如何初始化MediaRecorder,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!java中初始化MediaRecorder实现代码:
2023-05-30

编程热搜

目录