源码解析:深入Spring中的BeanFactory

Spring IOC学习(6)——DefaultListableBeanFactory DefaultListableBeanFactory已经是一个成熟的容器了,是Spring的默认BeanFactory 阅读详情

前言

  如果你曾经接触过Java开发,那么你一定会很熟悉Spring框架。作为Java社区最流行的企业级开发框架之一,Spring提供了各种各样的功能和工具,可以帮助开发人员更快、更高效地构建稳健和可扩展的应用程序。

  在Spring框架中,BeanFactory是一个非常重要的组件,它负责管理和维护应用程序中所有的Bean对象。本文将介绍BeanFactory的概述,数据结构和源代码解析,以帮助您深入理解Spring框架的核心原理。

  BeanFactory的介绍概述

  BeanFactory是Spring Framework的基础设施,是一个Factory模式的实现,用于管理Bean对象的创建、销毁和属性配置。在Spring中,BeanFactory是一个接口,定义了许多操作Bean对象的方法,常用的实现有DefaultListableBeanFactory和XmlBeanFactory等。

使用BeanFactory可以实现以下几个功能:

  • 将Bean注册到容器中,并根据需要检索它们;
  • 为这些Bean提供属性注入;
  • 管理Bean的生命周期;
  • 允许将一个Bean配置成原型或单例模式。

BeanFactory数据结构介绍

  在Spring Framework中,BeanFactory包含一个核心数据结构,用于管理应用程序中所有的Bean对象。该数据结构是一个Map,其中Key为Bean的名称,Value为Bean的实例。

  在DefaultListableBeanFactory的实现中,这个Map被称为beanDefinitionMap。这个Map中保存了所有的Bean定义信息,包括Bean的类名、依赖关系、初始化方法和销毁方法等。

  除了beanDefinitionMap之外,BeanFactory还包含了其他一些重要的数据结构,如singletonObjects和earlySingletonObjects等。这些数据结构用于跟踪应用程序中所有的单例Bean对象,并确保它们按照正确的顺序进行初始化和销毁。

BeanFactory的源码解析(重点)

  BeanFactory源码是Spring Framework中非常重要的一部分,它包含了许多关键的算法和数据结构,用于支持框架的各种基础设施。下面我们将介绍BeanFactory源码的一些重要部分,并逐步展示它是如何工作的。

BeanDefinitionReader接口

  BeanDefinitionReader接口是Spring Framework中Bean定义读取器的抽象。它定义了一种通用的方法,可以从不同的输入来源读取Bean定义信息,并将它们转换成BeanDefinition对象。

  在BeanFactory的实现中,BeanDefinitionReader接口的实现通常用于解析XML文件或Java注解,将Bean定义信息映射到BeanDefinition对象中。例如,XmlBeanDefinitionReader就可以解析XML文件,并将Bean定义信息转换为BeanDefinition对象。

public interface BeanDefinitionReader {
    void loadBeanDefinitions(String location) throws BeanDefinitionStoreException;
}

BeanDefinition接口

  BeanDefinition接口是Spring Framework中所有Bean定义的抽象。它定义了一种通用的方法,用于访问和操作Bean定义信息。

  在BeanFactory的实现中,BeanDefinition接口的实例通常被保存在beanDefinitionMap数据结构中,用于跟踪应用程序中所有Bean定义信息。

public interface BeanDefinition {
    String getBeanClassName();
    void setBeanClassName(String beanClassName);
    String[] getDependsOn();
    void setDependsOn(String... dependsOn);
}

AbstractBeanFactory类

  AbstractBeanFactory是Spring Framework中所有BeanFactory的抽象实现。它实现了BeanFactory接口,并提供了许多基础设施方法,如createBean、initializeBean和destroySingletons等。

  在AbstractBeanFactory的具体实现中,它包含了许多核心数据结构,如beanDefinitionMap、singletonObjects、earlySingletonObjects和registeredSingletons等。这些数据结构用于管理应用程序中所有的Bean对象,并确保它们按照正确的顺序进行初始化和销毁。

public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport
        implements ConfigurableBeanFactory {

    // 储存所有BeanDefinition信息的Map
    private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);
    
    // 储存所有单例Bean的Map
    private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);
    
    // 储存所有早期单例Bean的Map
    private final Map<String, Object> earlySingletonObjects = new HashMap<>(16);
    
    // 储存所有已注册、但还未实例化的Bean名称的Set
    private final Set<String> registeredSingletons = new LinkedHashSet<>(256);
    
    // 在BeanFactory中创建新Bean实例时会对其进行初始化
    protected Object initializeBean(Object existingBean, String beanName) {
        ...
    }
}

DefaultListableBeanFactory类

  DefaultListableBeanFactory是Spring Framework中BeanFactory的缺省实现。它继承了AbstractBeanFactory并扩展了一些新的功能,如registerBeanDefinition、preInstantiateSingletons和autowireCandidateResolver等。

  在DefaultListableBeanFactory的具体实现中,它不仅包含了AbstractBeanFactory中的所有核心数据结构,还增加了一些额外的数据结构,如ignoredDependencyTypes和dependenciesForBeanMap等。这些数据结构用于管理应用程序中所有的Bean对象,并确保它们按照正确的依赖关系进行初始化和销毁。

public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory
        implements ConfigurableListableBeanFactory, BeanDefinitionRegistry {

    // 储存所有BeanDefinition信息的Map
    private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);

    // 储存所有单例Bean的Map
    private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);

    // 储存所有早期单例Bean的Map
    private final Map<String, Object> earlySingletonObjects = new HashMap<>(16);

    // 储存所有已注册、但还未实例化的Bean名称的Set
    private final Set<String> registeredSingletons = new LinkedHashSet<>(256);

    // 在BeanFactory中创建新Bean实例时会对其进行初始化
    protected Object initializeBean(Object existingBean, String beanName) {
        ...
    }
}

结论

  在本文中,我们介绍了Spring Framework中BeanFactory的概述、数据结构和源代码解析。通过深入理解BeanFactory的实现原理,您可以更好地掌握Spring框架的核心技术,并在实际开发中更加得心应手。

  虽然本文只介绍了BeanFactory的一部分内容,但我们希望它能为您提供足够的帮助,让您更好地学习和使用Spring Framework。如果您有任何问题或建议,请随时与我们分享,我们将非常乐意听取您的意见和建议。

Java——Spring中BeanFactory与FactoryBean 目的。 阅读详情

相关推荐

Spring源码解析之【BeanFactory】与【BeanDefinitionRegistry】

在分析了Spring的源码之后发现,Spring里面用了很多的BeanFactory,这个类非常重要,因为实际上在Spring中BeanFactory是IOC容器的实际代表者,它用来创建和管理Bean。它为其他具体的IOC容器提供了最基本的规范,它是一个接口类型。 BeanFactory是最典型的工厂方法模式。不同类型的工厂会生产不同类型的商品。它的子接口和对应的实现类结构如下: 我们可以看到在...

想当厨子的程序媛 2005

DefaultListableBeanFactory 解读

DefaultListableBeanFactory 解读 DefaultListableBeanFactory介绍 BeanFactory是个Factory,也就是IOC容器或对象工厂,而DefaultListableBeanFactory是Bean工厂的一个默认实现,DefaultListableBeanFactory提供了原始的BeanFactory的功能,如:对外提供getbean()方法,维护一张beanDefinitionMap表 getbean DefaultListableBeanFacto

qq_43203949的博客 6653

一文带你解读Spring5源码解析 IOC之开启Bean的加载,以及FactoryBean和BeanFactory的区别。

Python微信订餐小程序课程视频 https://edu.youkuaiyun.com/course/detail/36074 Python实战量化交易理财系统 https://edu.youkuaiyun.com/course/detail/35475 前言 通过往期的文章我们已经了解了Spring对XML配置文件的解析,将分析的信息组装成BeanDefinition,并将其保存到相应的BeanDefinitionRegistry中,至此Spring IOC的初始化工作已经完成,这篇文章主要对Bean的加载进行一个深入的了解及

「 虚幻私塾」 362

Spring-DefaultListableBeanFactory介绍

Spring-DefaultListableBeanFactory是Spring Framework中的一个核心类,用于实现Bean的管理和依赖注入功能。DefaultListableBeanFactory是BeanFactory的一个具体实现类,它继承自AbstractAutowireCapableBeanFactory并实现了ListableBeanFactory和BeanDefinitionRegistry接口。它的主要作用是通过读取和解析Bean定义信息来创建和管理Bean实例。

架构师之路。。 1518

Spring的IOC详细剖析——源码解析之IoC的核心BeanFactory 编程

通过源码解析,我们了解了BeanFactory的基本功能和使用方式,以及Bean的实例化和装配过程。上述代码定义了获取Bean对象的方法getBean,它通过Bean的名称或类型来获取对应的实例。Spring的IoC容器有多种实现,其中最核心的是BeanFactory接口,它定义了IoC容器的基本功能和规范。BeanFactory接口是Spring IoC容器的根接口,它定义了获取Bean对象的方法。BeanFactory的实现类负责管理Bean的配置、实例化和装配,以及提供对Bean的访问和控制。

DevRevolt的博客 155

Spring DefaultListableBeanFactory类结构及功能

Spring DefaultListableBeanFactory类结构及功能。整个类是Sring IOC的核心类,我整理出来了。

Spring Framework源码解析——BeanFactory

本文介绍了Spring框架中BeanFactory的核心功能与实现机制。BeanFactory是Spring IoC容器的基础接口,提供Bean的获取、注册和管理能力,如getBean()、作用域判断等。其实现类DefaultListableBeanFactory通过beanDefinitionMap存储Bean定义,支持动态注册。文章详细解析了Bean加载流程(doGetBean→createBean)及单例Bean的创建与缓存机制,并阐述了Bean生命周期的关键阶段。

谷哥的小弟 1044

基于smart_rtmp直播,最简单的部署手册

版本号 添加内容 修改时间 V1.0 新建 2021年12月30日 V1.1 增加网页播放 2021年12月31日 V1.2 增加是否可以多流和测试数据 2022年1月5日 目录 一、软件储备 1.推流软件:OBS 2.服务器流媒体软件:smart_rtmp 3.播放软件:Pot...

qq_28768477的博客 1万+

深度解析 Spring 源码:揭秘BeanFactory 之谜

深入解析 Spring 源码,特别是关于 BeanFactory 的部分,揭示了 Spring 框架中核心的依赖注入和控制反转的实现原理。BeanFactory 是 Spring 框架的核心容器接口,负责管理应用程序中的对象(Bean),并实现了对象之间的依赖关系。通过分析 BeanFactory 的源码,我们可以深入了解 Spring 是如何实现 Bean 的创建、初始化、依赖注入以及生命周期管理的。通过深入分析 BeanFactory 的源码,我们可以了解 Spring 框架的核心设计思想和实现细节。

忆~遂愿的博客 5822

知识图谱实战:从零搭建一个企业级金融风控图谱(附完整代码)

本文提供了一份从零构建企业级金融风控知识图谱的实战指南。通过使用Neo4j图数据库和Python,手把手教你整合多源数据、设计数据模型,并利用Cypher查询与图算法挖掘隐藏的关联风险与欺诈网络,附有完整代码,助力金融科技从业者实现从数据孤岛到全局风险洞察的升级。

weixin_29095587的博客 355

STM32F407+HAL库+W5500实现TCP通讯 个人项目总结

推荐阅读此博客 cv即可成功首先需要一个可以进行串口调试的工程,方便进行调试。1.在W5500官网移植库文件重点是Ethernet这个文件夹将里面的 socket.c,socket.h,wizchip_conf.c,wizchip_conf.h,还有根据W5500文件夹里的w5500.c和w5500.h移植到自己的工程里面。然后再创建一个.c和.h文件 我的叫w5500_port_hal.c 和w5500_port_hal.h 记得将.h文件链接到工程里。

a234abr的博客 2246

spring源码深入解析BeanFactory

ApplicationContext与BeanFactory的区别

yan_pan的博客 485

fsQCA实战:从数据校准到结果解读的完整流程(附R代码示例)

本文提供了一份完整的模糊集定性比较分析(fsQCA)实战指南,详细阐述了从数据校准、必要条件分析、真值表构建到布尔最小化与结果解读的全流程。通过R语言代码示例,帮助研究者掌握如何将理论转化为可操作的分析步骤,并产出稳健的中间解,以揭示导致结果的复杂条件组合。

d6e7f8g9h的博客 1168

【spring源码深度解析】:BeanFactory和ApplicationContext之BeanFactory

本文介绍了spring容器相关的两个类BeanFactory和ApplicationContext之间的关系,介绍了BeanFactory,ApplicationContext的继承体系,ApplicationContext最终使用的是哪个BeanFactory实现类

Fight_Rain的博客 418

基于STM32的INA226电压电流检测仪

该功率检测装置以STM32F103C8T6微控制器为核心,集成功率检测、数据交互、状态显示和用户提示功能,通过模块化设计实现稳定运行。系统包括按键、LED指示灯、OLED屏幕、INA226电压电流检测、复位电路、晶振电路、蜂鸣器驱动、输入输出接口、调试接口和3.3V降压电路等模块。微控制器通过按键检测用户输入,启动功率检测,采集数据并通过OLED显示,异常情况触发蜂鸣器报警,LED状态指示同步反馈。3.3V降压电路为所有模块提供稳定电源,晶振电路确保时序精度。INA226芯片通过I2C接口与微控制器通信,实

a2784288164的博客 1908

别再乱拖了!Godot 4.x 场景编辑器的7个隐藏操作技巧(附快捷键清单)

本文揭示了Godot 4.x场景编辑器的7个隐藏操作技巧,包括智能对齐、轴心点应用、多节点批量操作等,帮助开发者提升游戏开发效率。特别介绍了坐标系切换和自定义快捷键等实用功能,适用于处理复杂场景和团队协作。

weixin_29534421的博客 360

Spring源码分析之BeanFactory接口的解析

在我们的前两篇文章当中我们看完之后其实我们都会发现当我们进行相关的重要的行为的时候如我们看到的GetBean或者在Register方法的时候会出现BeanFactroy进行调用那么这个时候我们就会产生一个疑惑这个到底是什么为什么这么重要,在我没有说的时候我们从字面上进行一个简单的分析就是说这个是一个Bean工厂那么工厂不就是用来进行加工的那么加工肯定是需要原料以及加工流程的这么想的话其实已经把这个功能基本上都全部进行概括了,那么下面的话我们就来进行解说。

2201_75397629的博客 1511

YOLOv8改进,YOLOv8主干网络替换为ShuffleNetV2

ShuffleNet V2的设计原则:1.减少内存访问成本:通过优化数据传输路径,减少内存访问延迟,提高整体运算速度。2.考虑平台特性:针对不同硬件平台的特性进行优化设计,确保在目标平台上的高效运行。3.结构简洁高效:采用简洁而高效的模块设计,降低计算复杂度,同时保持或提升模型的预测准确性。下图,以四种不同计算复杂度水平下的准确性(在ImageNet验证集上的分类),速度和FLOPs的测量结果。(a, c) 为GPU结果,批量大小为8。(b, d) 为ARM结果,批量大小为1。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1564

Spring源码解析之BeanFactory

BeanFactory接口:   用于访问SpringBean容器的根接口,这个接口是由持有许多bean定义的对象实现的,每个定义都由一个字符串名称唯一标识。根据bean定义,工厂将返回包含对象的独立实例(原型设计模式)或单个共享实例(与工厂范围内的单例实例为单例的单例设计模式相比,这是一种更好的选择)。BeanFactory是应用程序组件的中心注册表,并集中应用程序组件的配置。 完整的初始化...

weixin_30307267的博客 166

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Spring源码解析-beanfactory

Demo uml类图 XmlBeanFactory继承关系 XmlBeanDefinitionReader BeanDefinition xml解析beanDefinition 资源文件抽象 loadBeanDefinition xml文件校验和解析 registerBeanDefinitions parseBeanDefinitions processBeanDefinition delegate

熊猫猫 3608

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

spring之BeanFactory源码解析

FactoryBean是什么 FactoryBean是spring源码中一种特殊的bean,就如同这个Bean的中文翻译一样,是一个工厂Bean,是用来生成Bean的工厂 可以用来干什么 假如我们不希望spring帮助我们去New一个对象,但是又希望生成的对象能交给spring进行管理,那么我们可以去实现这个FactoryBean接口,重写其中的getObject方法这样就可以根据自己的逻辑去生成一个Bean对象 源码解析 FactoryBean public interface FactoryBean

kznsbs的博客 435

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Spring BeanFactory源码解析

一、BeanFactory接口    1. BeanFactory接口是工厂方法的实现机制,具体定义了以下几个方法:public interface BeanFactory { // 对于FactoryBean,该前缀用于取出FactoryBean,而非getObject对应的方法 String FACTORY_BEAN_PREFIX = "&"; // 返回bean实例,如果

ac_dao_di的专栏 759

spring 源码解析:BeanFactory

spring是日常开发中用的最经典的框架,特别有学习意义

weixin_46389673的博客 146

spring源码解析_BeanFactory

spring源码解析_BeanFactory

qq_44597856的博客 152

Spring源码解析 - BeanFactory 接口

package org.springframework.beans.factory; import org.springframework.beans.BeansException; import org.springframework.core.ResolvableType; import org.springframework.lang.Nullable; /** * 1、概述 * BeanFactory是访问Spring Bean容器的根接口,实现此接口的类可以生成BeanDefiniti.

weixin_38085783的博客 375
上一篇: Spring中的 DI 原理及源码解析
下一篇: 探究 Spring 框架中使用的设计模式
JavaWizard-M
博客等级 码龄6年 3159粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值