首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏海说

    Spring IOC容器分析(2) -- BeanDefinition

    上文对Spring IOC容器的核心BeanFactory接口分析发现:在默认Bean工厂DefaultListableBeanFactory中对象不是以Object形成存储,而是以BeanDefinition > beanDefinitionMap = new ConcurrentHashMap<String, BeanDefinition>(256); 下面来对BeanDefinition接口进行分析BeanDefinition 首先来看一幅图,BeanDefinition接口的UML类图关系: ? 可以看到BeanDefinition接口继承了两个接口,这两个接口均为祖宗级接口。 setFactoryBeanName(String factoryBeanName)设置该bean的加载工厂,String getFactoryBeanName()获取bean的加载工厂 通过对接口方法分析 ,可以发现BeanDefinition定义了bean实例的基础方法,基本上通过BeanDefinition接口就可以描述一个bean对象。

    1.2K00发布于 2017-12-28
  • 来自专栏关忆北.

    深入分析-Spring BeanDefinition构造元信息

    BeanDefinition的元数据解析 在Spring中,无论是通过XML、注解、Java配置类定义Bean元数据,最终都是需要转换成BeanDefinition对象,然后被注册到Spring容器中。 源码分析XML是如何转化为Spring BeanDefinition的 将xml文件中的配置转为为BeanDefinition需要依赖自XmlBeanDefinitionReader类中的loadBeanDefinitions 源码分析配置类、注解是如何转化为Spring BeanDefinition的 在Spring中,配置类和注解都可以被转换为Bean定义(BeanDefinition)。 下面是关于如何将配置类和注解转换为Bean定义的简要源码分析: 配置类转换为Bean定义: 当使用Java配置类时,Spring会通过解析配置类中的注解来生成相应的Bean定义。 实例 BeanDefinition beanDefinition = beanDefinitionBuilder.getBeanDefinition(); // BeanDefinition 并非 Bean

    38110编辑于 2024-01-08
  • 来自专栏大数据那些事

    beandefinition与beanfactory

    前面在讲到bean的生命周期时,提到了beandefinition,这个东西是用来创建bean对象的,beandefinition有很多重要属性:1.beanClass 2.scope 3.isLazy 4.dependsOn 5.primary 6.initMethodName beanclass 表示一个bean的类型 scope bean的作用域,singleton,单例,prototype,原型 bean都得创建好 primary 如果找到了多个同type的bean,会查看有没有主bean,如果存在,则直接注入 initMethodName 初始化时对bean进行加工 beanfactory将利用beandefinition

    43520发布于 2021-04-23
  • 来自专栏源码之路

    逐行阅读Spring5.X源码(一) BeanDefinition,起点

    如何理解BeanDefinition 2. 准备环境 3. BeanDefinition接口讲解 4. BeanDefinition的类继承关系 5. IOC的引出 6. 很多读者从spring容器启动开始逐行debug源码进行分析,刚开始很容易理解,但是当你逐层debug源码深处时,就会感慨“身在此山中,不识真面目”。 那就跟随笔者的脚步,逐行分析spring源码,毕竟这是你迈向java架构师必须逾越的鸿沟! 在开始之前说清楚,beanDefintion的比较枯燥和晦涩难懂,但是非常非常重要。 其实笔者很喜欢这种代码方式完成spring配置工作,这样能让我们更深入的了解和应用spring,不过这种方式的缺点也很明显-繁琐易出错,spring为了简化我们的工作提供了xml配置方式,直到spring5. invokeBeanFactoryPostProcessors(beanFactory); ...以下省略 翻译一下名字,执行bean工厂的后置处理器,这行代码完成了扫描与注册,我不带大家分析里面的代码

    1.6K111发布于 2020-09-03
  • 来自专栏小工匠聊架构

    Spring5源码 - 03 普通对象对应的BeanDefinition是如何存入DefaultListableBeanFactory#beanDefinitionMap 源码分析

    ---- Pre 接上文 Spring5源码 - 02 Bean和Java对象的区别与猜想验证BeanDefinition 我们分析了流程, 也从理论上描述了 普通对象 ----- BeanDefinition ------Bean对象之间的关联,提到了一个BeanDefinition的Map集合 (我们称之为 bdmap ,后面都用这个简称代替 ), 那从源码里面怎么体现出来bdmap 的呢? 完全交给开发者来处理,比如你把这个map中的数据给remove掉了,等等之类的不可信任的操作,结果可想而知,所以Spring封装了一些API,仅允许开发者通过Spring提供的API来修改bdmap . ---- 源码分析 说明这一步就完成了 从 普通对象 (注册配置类)------- BeanDefinition ----------存入到 bdMap中的操作 ---- 接下来分析下核心源码 流程如下 ? 这个方法太重要了,一共有12个方法里面, 下篇博文 继续 分析 ----

    52720发布于 2021-08-17
  • 来自专栏张恒的网络日志

    Spring的BeanDefinition解析

    他的作用就是通过标签找到相应的解析器解析成beanDefinition。 public BeanDefinition parseCustomElement(Element ele, BeanDefinition containingBd) { String namespaceUri org.springframework.beans.factory.xml.NamespaceHandler接口表明,这个接口可以读取节点信息并转换为BeanDefinitionBeanDefinition 2.1 如果子节点是<bean>元素,那就走普通的beanDefinition解析。 2.2 如果不是<bean>元素,那就走定制化beanDefinition解析。 ,向已有的BeanDefinitionRegistry中注册beanDefinition

    87010发布于 2020-04-29
  • 来自专栏星月小站

    Spring框架源码脉络分析(一):IoC与容器、Bean和BeanDefinition

    系列文章概述 系列文章主页:Spring框架源码脉络分析总结 阅读建议:读者至少要使用过Spring框架,了解Spring的配置方法,包括Xml文件配置和注解配置。 分析的源码版本:spring-framework : 5.2.0.RELEASE 官方参考文档:Spring Framework Documentation 本文主要以分析Spring源码模块脉络为主, 我们将在第二章节中重点来分析Spring中的容器类。 Bean和BeanDefinition 在Spring中,Bean是一等公民,我们常说的对象在Spring中就描述为Bean。 关于Bean和BeanDefinition的区别,就说到这,最后再次重申本文章的内容:本文主要以分析Spring源码模块脉络为主,主要带领读者理清Spring运行的流程和脉络,不会深究一些知识细节,避免陷入细节无法自拔 ,所以虽然BeanDefinition很重要,是Spring的基石,但还是以介绍为主,并不会深入进入分析源码,意在最快时间带领读者进入Spring的脉络与流程,如果对某个接口或者某个实现类的逻辑比较感兴趣

    94120发布于 2020-08-02
  • 来自专栏玩转JavaEE

    Spring BeanDefinition 也分父子?

    在 Spring 框架中,BeanDefinition 是一个核心概念,用于定义和配置 bean 的元数据,虽然在实际应用中,我们一般并不会或者很少直接定义 BeanDefinition,但是,我们在 BeanDefinition 允许开发人员以一种声明性的方式定义和组织 bean,这里有很多属性,今天松哥单纯的来和小伙伴们聊一聊它的 parentName 属性,parentName 属性在 BeanDefinition 这就是 Spring BeanDefinition 中的父子关系问题。 2. 源码分析 那么接下来我们也把这块的源码稍微来分析一下。 简便起见,我们就不从 Bean 的创建开始分析了,直接来看和 BeanDefinition 中 parentName 属性相关的地方,但是前面涉及到的方法还是给小伙伴们梳理一下,就是下图: 那么这里涉及到的关键方法其实就是 如果这里获取到的值为 null,那么就会根据当前传入的 BeanDefinition 生成一个 mbd,至于具体的生成方式:如果传入的 BeanDefinition 是 RootBeanDefinition

    35820编辑于 2023-09-09
  • 来自专栏玩转JavaEE

    是谁去读取 BeanDefinition 的?

    前面松哥写文章和小伙伴们仔细捋了捋 Spring 中的 BeanDefinition 存在的几种情况,那么 BeanDefinition 是谁来加载呢? 如果是 Java 代码配置,那不用说,都是注解扫描去加载 BeanDefinition 的,但是如果是 XML 或者其他格式的配置文件,则有专门的 BeanDefinition 加载器,今天咱们就来看看这个专门的 BeanDefinition 加载器。 的生成器,有的时候,我们在 XML 文件中配置的时候,可能没有给 Bean 设置 name 或者 id 属性,那么将会通过这个生成器去生成 beanName,这个松哥在最近录制的 Spring 源码分析视频中已经详细分析过了 beanName,集合的 value 则是 BeanDefinition 对象。

    29940编辑于 2023-09-24
  • 来自专栏后端技术

    spring BeanDefinition Bean的注册

    代码案例见spring中<bean>中parent标签的使用 BeanDefinition继承关系 如图: 红圈的五个类都值得分析一下。 BeanDefinition 官方解释: BeanDefinition是Bean的定义,描述了一个Bean实例。它包含了描述一个Bean所需的最少接口方法。 我的理解: 通过解析xml的<bean>节点,或者解析注解类,会将Bean的定义设置到BeanDefinition。但仅仅是BeanDefinition各种成员变量的设置,还没有实例化对象。 换句话说,对于xml解析法,只是把xml的<bean>文本转换为BeanDefinition对象而已;对于注解法,只是把注解的类转换为BeanDefinition对象而已。 对半成品的BeanDefinition进行加工处理,将以占位符表示的配置解析为最终的实际值,这样半成品的BeanDefinition就成为成品的BeanDefinition

    1.1K40发布于 2019-05-25
  • Spring源码系列:BeanDefinition载入(中)

    Web核心-Servlet Spring源码系列:启动过程 Spring源码系列:容器刷新 Spring源码系列:BeanFactory的创建 Spring源码系列:BeanDefinition源码解析 Spring源码系列:BeanDefinition载入(上) Spring源码系列:BeanDefinition载入(中) Spring源码系列:BeanDefinition载入(下) 上一篇是将Bean 这个方法: public AbstractBeanDefinition parseBeanDefinitionElement( Element ele, String beanName, BeanDefinition public void parsePropertyElements(Element beanEle, BeanDefinition bd) { //获取子元素节点 NodeList nl public void parsePropertyElement(Element ele, BeanDefinition bd) { //首先获取到property的名称 String

    21910编辑于 2025-06-07
  • 来自专栏码农架构

    定义Bean:什么是BeanDefinition

    上一周主要是针对Spring IoC 容器的概述,包括Spring IoC 依赖查找、依赖注入、依赖来源、配置元信息、容器、应用上下文以及Spring IoC 容器生命周期进行主要分析与概述 接下来的部分进入 Spring Bean 的基础部分、我主要分析罗列了主要内容:定义Spring Bean、BeanDefinition 元信息、命名Spring Bean、Spring Bean 的别名、注册Spring 对定义Bean 的理解,什么事BeanDefinition? 那么定义Spring Bean 从一下几个方面进行深入讨论 首先第一个是什么是BeanDefinitionBeanDefinition其实字面意思它就是Bean的一个定义 ? 这个时候它的Bean可能就会包含一些大小相关的属性 总结 通过上述的维度,简单讨论了什么事Bean的定义以及如何来定义Bean,接下来主要分析BeanDefinition相关的元信息详细介绍一些案例的输出

    1.3K30发布于 2020-10-26
  • 来自专栏程序员闻人

    Spring Bean 背后的 BeanDefinition

    Spring使用BeanDefinition来描述bean。 BeanDefinition ? BeanDefinition BeanDefinition继承了AttributeAccessor和BeanMetadataElement接口。 BeanDefinition接口是Spring对bean的抽象。 继承了BeanDefinition,拓展了BeanDefinition接口的能力: ? 通过这个类我们可以方便的构建BeanDefinition的实例对象。

    1K31发布于 2019-09-24
  • Spring源码系列:BeanDefinition源码解析

    首先就是BeanDefinition的类定义: public interface BeanDefinition extends AttributeAccessor, BeanMetadataElement (这个密等下揭开) 先来看看BeanDefinition一个继承结构吧(均是与BeanDefinition有直接关联的类或者接口)! Object getSource(); BeanDifinition源码分析 一个BeanDefinition描述了一个bean的实例,包括属性值,构造方法参数值和继承自它的类的更多信息。 boolean isLazyInit(); 5.依赖关系设置 //设置这个bean依赖被初始化的bean的名字。 bean工厂将保证这些bean首先被初始化。 BeanDefinition getOriginatingBeanDefinition(); 从上面的属性和方法分析可以看出,BeanDefinition对于一个Bean的描述做了较为完整的一套约束。

    20400编辑于 2025-06-07
  • Spring源码系列:BeanDefinition载入(上)

    继上一篇BeanFactory的创建之后,其实就是BeanDefinition载入了。 //只能通过绝对URL加载单个资源 Resource resource = resourceLoader.getResource(location); //解析并返回beanDefinition的数量 BeanDefinitionParserDelegate用于将 Document 的内容转成 BeanDefinition实例;BeanDefinitionDocumentReader 本身不具备该功能而是交给了该类来完成 这个在后面的说道BeanDefinition体系的时候再聊。 关于DefaultListableBeanFactory中registerBeanDefinition方法的解析逻辑将在[Spring源码系列:BeanDefinition载入(下)]()中来说.

    20800编辑于 2025-06-07
  • 来自专栏源码之路

    逐行阅读Spring5.X源码(三) BeanDefinition的实现类详解,拔高

    上回咱们讲了BeanDefinition的父接口及父接口实现类。本篇博文咱么继续讲BeanDefinition的实现类。 前两篇文章讲的BeanDefinition属性值大都保存在AbstractBeanDefinition,并实现了子BeanDefinition通用方法。 构造函数、构造函数形参类型 5. 5. 至此,BeanDefinition整个家族继承关系讲完了,相信认真读过这三篇博文的读者对BeanDefinition都有深入的理解了,建议读者结合这三篇博文认真练习,BeanDefinition打好基础了后续

    2K42发布于 2020-09-04
  • 来自专栏kafka专栏

    Spring源码分析(三)Spring是如何把元素解析成BeanDefinition对象的

    是一个非常重要的类;spring将所有的解析操作都委托给了这个类;所有我们今天分析 BeanDefinition的创建,都是在这个类里面; 那么我们进一起进入探个究竟把;创建BeanDefinition usedNames 会持有所有解析出来的beanName 和 aliases; *4.解析元素,将xml中的所有元素解析成AbstractBeanDefinition中对应的属性; *5. override.setSource(extractSource(ele)); overrides.addOverride(override); *5. watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA2MzQwNjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ele, BeanDefinition containingBd) 来解析; //第一篇文章分析过 根据元素选择不同的解析器来解析; if (!

    83660发布于 2021-07-14
  • Spring源码系列:BeanDefinition载入(下)

    在Spring源码系列:BeanDefinition载入(上)中已经大概捋了一下解析过程,本篇将记录一下bean的注册过程。 1、beanDefinition类型判断和验证 这里的验证主要是验证不能将静态工厂方法与方法重写相结合(静态工厂方法必须创建实例); if (beanDefinition instanceof AbstractBeanDefinition 中已经存在名为beanName的Beandefinition 如果当前beanDefinitionMap中已经存在名为beanName的Beandefinition了(即检查是否有相同名称的beanDefinition } //覆盖原有的Beandefinition this.beanDefinitionMap.put(beanName, beanDefinition); } 4、beanDefinitionMap beanName); this.manualSingletonNames.remove(beanName); } this.frozenBeanDefinitionNames = null; 5

    20600编辑于 2025-06-07
  • 来自专栏源码之路

    逐行阅读Spring5.X源码(番外篇)BeanDefinition到底有多重要

    故而当spring读取到类的信息之后②会实例化一个BeanDefinition的对象,继而调用这个对象的各种set方法存储信息;每扫描到一个符合规则的类,spring都会实例化一个BeanDefinition 的代码级别是用一个接口来表示BeanFactoryPostProcessor,只要实现这个接口便是一个bean工厂后置处理器了,BeanFactoryPostProcessor的详细源码解析后面文章再来分析 ConfigurationClassPostProcessor便是一个spring自己实现的bean工厂后置处理器,这个类笔者认为是阅读spring源码当中最重要的类,没有之一;他完成的功能太多了,以后我们一一分析 ("Z");把x所对应的beanDefinition对象所对应的class改成了Z,这是演示动态修改一个已经扫描完成的beanDefinition对象; 测试代码如下: public static 但是BeanDefinition这个接口有太多的实现类,是一个比较复杂的体现,下一篇我慢慢把spring体现当的各种beanDefinition对象逐一介绍清楚; 那么第④步当中提到的执行程序员提供的

    1.1K10发布于 2020-09-04
  • 来自专栏源码之路

    逐行阅读Spring5.X源码(二) BeanDefinition的父接口-AttributeAccessor 、BeanMetadataElement ,进阶

    的基础知识,本篇文章咱们详细讨论BeanDefinition家族体系。 image.png 1、BeanDefinition的父接口 上一篇博文详细讲了接口BeanDefinition的功能,笔者打算围绕该接口进行扩展。 也就是说BeanDefinition的实现类同时实现了BeanDefinition 、AttributeAccessor、BeanMetadataElement三个接口的功能。 image.png 至此,我们讲完了BeanDefinition接口、父接口、父接口实现类的源代码,BeanDefinition的实现类会继承BeanDefinition父接口的实现类。 到此为止,BeanDefinition的实现类可以操作属性和源,下面讲解BeanDefinition的实现类如何实现BeanDefinition接口。

    1.3K31发布于 2020-09-03
领券