spring BeanDefinition详尽篇

Spring源码探究 | 五、初识Spring的核心类图之IOC Spring框架核心组成部分:Bean工厂和Spring上下文、BeanDefinition、BeanDefinitionReader、Resource和ResourceLoader 阅读详情

定义

BeanDefinition接口继承了AttributeAccessor, BeanMetadataElement两个接口,其主要的作用是实现将Bean的定义转换为java对象,是对Bean定义的一个抽象,其中的各种属性对应了xml中的各种配置信息。

类依赖

 

Spring中最常用的就三个具体的实现类,分类是:RootBeanDefinition,ChildBeanDefinition,GenericBeanDefinition

RootBeanDefinition:最常用的类,用于标定bean的定义。

ChildBeanDefinition:与RootBeanDefinition必定一块出现,表示一个父bean下面有子bean,xml中配置如下:

<bean id="a" class="spring_study_aop.a" init-method="init" ></bean>

<bean id="b" class="spring_study_aop.b" init-method="init" parent="a"></bean>,目前的这种方式已经被GenericBeanDefinition替换了

GenericBeanDefinition: RootBeanDefinition+ ChildBeanDefinition= GenericBeanDefinition

代码以及解析

package org.springframework.beans.factory.config;

 

import org.springframework.beans.BeanMetadataElement;

import org.springframework.beans.MutablePropertyValues;

import org.springframework.core.AttributeAccessor;

import org.springframework.lang.Nullable;

 

/**

 * A BeanDefinition describes a bean instance, which has property values,

 * constructor argument values, and further information supplied by

 * concrete implementations.

 *

 * <p>This is just a minimal interface: The main intention is to allow a

 * {@link BeanFactoryPostProcessor} such as {@link PropertyPlaceholderConfigurer}

 * to introspect and modify property values and other bean metadata.

 *

 * @author Juergen Hoeller

 * @author Rob Harrop

 * @since 19.03.2004

 * @see ConfigurableListableBeanFactory#getBeanDefinition

 * @see org.springframework.beans.factory.support.RootBeanDefinition

 * @see org.springframework.beans.factory.support.ChildBeanDefinition

 */

public interface BeanDefinition extends AttributeAccessor, BeanMetadataElement {

 

                   /**

                    * 标记这个bean的作用域是单例 ,可以通过xml中scope属性来设置

                    */

                   String SCOPE_SINGLETON = ConfigurableBeanFactory.SCOPE_SINGLETON;

 

                   /**

                    *  标记这个bean的作用域是单例    ,可以通过xml中scope属性来设置

                    */

                   String SCOPE_PROTOTYPE = ConfigurableBeanFactory.SCOPE_PROTOTYPE;

 

 

                   /**

                    * bean的角色定义,默认,为应用程序定义。

                    */

                   int ROLE_APPLICATION = 0;

 

                   /**

                    * bean的角色定义,为应用程序定义的比较大的对象。

                    */

                   int ROLE_SUPPORT = 1;

 

                   /**

                    * spring内部定义的bean

                    */

                   int ROLE_INFRASTRUCTURE = 2;

 

 

                   // Modifiable attributes

 

                   /**

                    * Set the name of the parent definition of this bean definition, if any.

                    */

                   void setParentName(@Nullable String parentName);

 

                   /**

                    *获取父类bean的名称,父类bean可以通过parent属性来设置父bean.

                    */

                   @Nullable

                   String getParentName();

 

                   /**

                    * Specify the bean class name of this bean definition.

                    */

                   void setBeanClassName(@Nullable String beanClassName);

 

                   /**

                    * Return the current bean class name of this bean definition.

                    * <p>Note that this does not have to be the actual class name used at runtime, in

                    * case of a child definition overriding/inheriting the class name from its parent.

                    * Also, this may just be the class that a factory method is called on, or it may

                    * even be empty in case of a factory bean reference that a method is called on.

                    * Hence, do <i>not</i> consider this to be the definitive bean type at runtime but

                    * rather only use it for parsing purposes at the individual bean definition level.

                    * @see #getParentName()

                    * @see #getFactoryBeanName()

                    * @see #getFactoryMethodName()

                    */

                   @Nullable

                   String getBeanClassName();

 

                   /**

                    * xml中scope来控制,默认sington                    

*/

                   void setScope(@Nullable String scope);

 

                   /**

                    * Return the name of the current target scope for this bean,

                    * or {@code null} if not known yet.

                    */

                   @Nullable

                   String getScope();

 

                   /**

                    *xml中lazy-init来控制,默认false

                    */

                   void setLazyInit(boolean lazyInit);

 

                   /**

                    * Return whether this bean should be lazily initialized, i.e. not

                    * eagerly instantiated on startup. Only applicable to a singleton bean.

                    */

                   boolean isLazyInit();

 

                   /**

                    *xml中depends-on来控制 ,多个以逗号隔开

*/

                   void setDependsOn(@Nullable String... dependsOn);

 

                   /**

                    * Return the bean names that this bean depends on.

                    */

                   @Nullable

                   String[] getDependsOn();

 

                   /**

                    *设置该对象是否可以被其他对象自动装配。

                    */

                   void setAutowireCandidate(boolean autowireCandidate);

 

                   /**

                    * Return whether this bean is a candidate for getting autowired into some other bean.

                    */

                   boolean isAutowireCandidate();

 

                   /**

                    * xml中的primary属性来控制,当A类型的bean需要注入B类型的实现类,并且B类型的实现类有多个,在按类型将B的实现类注入到A中时,优先注入该属性为true的实现类,当然如果同一个类的实现类有多个primary为true,则抛出异常。

                    */

                   void setPrimary(boolean primary);

 

                   /**

                    * Return whether this bean is a primary autowire candidate.

                    */

                   boolean isPrimary();

 

                   /**

                    * 当bean的创建方式是以工厂进行创建的时候,该方法设置工厂的名称

     * 例如通过一下定义来创建bean,<bean id="AppleFactory" class="cn.lee.factory.AppleFactory" factory-method="newInstance">

                                              <constructor-arg index="0" value="red"></constructor-arg>

                                      </bean>

                    */

                   void setFactoryBeanName(@Nullable String factoryBeanName);

 

                   /**

                    * Return the factory bean name, if any.

                    */

                   @Nullable

                   String getFactoryBeanName();

 

                   /**

                    * 工厂创建bean时,设置创建bean的方法名称

                    * @see #setBeanClassName

                    */

                   void setFactoryMethodName(@Nullable String factoryMethodName);

 

                   /**

                    * Return a factory method, if any.

                    */

                   @Nullable

                   String getFactoryMethodName();

 

                   /**

                    * Return the constructor argument values for this bean.

                    * <p>The returned instance can be modified during bean factory post-processing.

                    * @return the ConstructorArgumentValues object (never {@code null})

                    */

                   ConstructorArgumentValues getConstructorArgumentValues();

 

                   /**

                    * Return if there are constructor argument values defined for this bean.

                    * @since 5.0.2

                    */

                   default boolean hasConstructorArgumentValues() {

                                      return !getConstructorArgumentValues().isEmpty();

                   }

 

                   /**

                    * 获取类的属性和属性值的类PropertyValue

                    */

                   MutablePropertyValues getPropertyValues();

 

                   /**

                    * Return if there are property values values defined for this bean.

                    * @since 5.0.2

                    */

                   default boolean hasPropertyValues() {

                                      return !getPropertyValues().isEmpty();

                   }

 

 

                   // Read-only attributes

 

                   /**

                    * Return whether this a <b>Singleton</b>, with a single, shared instance

                    * returned on all calls.

                    * @see #SCOPE_SINGLETON

                    */

                   boolean isSingleton();

 

                   /**

                    * Return whether this a <b>Prototype</b>, with an independent instance

                    * returned for each call.

                    * @since 3.0

                    * @see #SCOPE_PROTOTYPE

                    */

                   boolean isPrototype();

 

                   /**

                    * 设置该bean为abstract,设置为true的时候,该bean的不会被实例化。xml可以通过abstract属性来控制,默认false,一般与parent一起使用,设置abstract的bean定义不需要创建实例,仅仅作为parent来进行一些通用的配置,后面的bean通过设置parent来获取相应的配置信息,从而达到简化配置的目的

                    */

                   boolean isAbstract();

 

                   /**

                    * Get the role hint for this {@code BeanDefinition}. The role hint

                    * provides the frameworks as well as tools with an indication of

                    * the role and importance of a particular {@code BeanDefinition}.

                    * @see #ROLE_APPLICATION

                    * @see #ROLE_SUPPORT

                    * @see #ROLE_INFRASTRUCTURE

                    */

                   int getRole();

 

                   /**

                    * Return a human-readable description of this bean definition.

                    */

                   @Nullable

                   String getDescription();

 

                   /**

                    * Return a description of the resource that this bean definition

                    * came from (for the purpose of showing context in case of errors).

                    */

                   @Nullable

                   String getResourceDescription();

 

                   /**

                    * Return the originating BeanDefinition, or {@code null} if none.

                    * Allows for retrieving the decorated bean definition, if any.

                    * <p>Note that this method returns the immediate originator. Iterate through the

                    * originator chain to find the original BeanDefinition as defined by the user.

                    */

                   @Nullable

                   BeanDefinition getOriginatingBeanDefinition();

 

}

 

OFDM时频脉冲形状与子载波正交性的理解 从多载波调制的角度来理解子载波间正交,首先要明确OFDM默认的脉冲成型是时域矩形窗,时域上每个子载波 ej2πfnte^{j2πf_nt}ej2πfn​t 都被一个矩形窗脉冲gT(t)g_T(t)gT​(t)成型。其次,OFDM子载波间隔 等于 OFDM符号周期的倒数,这是子载波正交的条件。 ​ 根据时频脉冲形状,可以从时域上理解如左图(注意是矩形脉冲 乘 复指数),从频域上理解如右图(sinc脉冲 卷 频点)。 ​ 阅读详情

相关推荐

Simulink/Requirements Toolbox 学习(一):概述

编写、导入、导出需求并使需求正式化;两种创建需求的模块:需求编辑器、需求透视;描述需求的方式:文本、图像和关键字;通过导入和导出需求文件,与第三方需求管理工具(例如 Microsoft Word、Microsoft Excel®、IBM DOORS和 IBM DOORS Next)集成。涉及模块:Requirements Eidtor、Requirements Table等;

855

BeanDefinition的父接口

kotlin复制代码vbnet复制代码BeanDefinition接口的父接口: 1. AttributeAccessor 1.1 实现类AttributeAccessorSupport是1个抽象类,作用是操作bd的属性,属性存放在LinkedHashMap。1.2 LinkedHashMap的key是String,value是BeanMetadataAttribute。

BASK2312的博客 264

扩散模型在工业缺陷检测中的应用与优化

扩散模型作为生成式AI的重要分支,通过逐步去噪的逆向过程实现高质量数据生成。其核心U-Net架构结合残差连接和时间步嵌入,特别适合处理工业场景中的细微缺陷检测。在计算机视觉领域,这种技术突破了传统深度学习模型对小样本数据的限制,通过域自适应预训练和小样本微调两阶段框架,显著提升金属表面、纺织品等复杂场景的检测准确率。关键技术实现涉及噪声调度优化、多任务损失设计等工程实践,最终在MVTec AD等工业数据集上达到90%以上的检测精度,为智能制造提供可靠的自动化质检方案。

weixin_30512043的博客 497

Spring Framework 源码阅读(二):BeanDefinition的作用

Spring Framework 源码阅读(二):BeanDefinition接口的作用 BeanDefinition接口的定义: package org.springframework.beans.factory.config; import org.springframework.beans.BeanMetadataElement; import org.springframework.beans.MutablePropertyValues; import org.springframework.co

kaven 1975

【DAB收音机】DAB 认证介绍

DAB 认证ESTI 标准文档: ETSI 103461实际过认证时,需要根据产品的受众国家及区域,参考当地官方是否有国内认证协议。需要参考当地文档进行功能开发。例如:阿联酋地区用《UAE.S 5021 _ 2018.pdf》标准进行认证。ESTI 的DAB认证协议规定了家用和车载数字无线电的最低要求,及其对应的测试方法,是数字无线电认证标志规定的技术基础。本文以车载数字无线电接收器为例,进行部分DAB认证的介绍,详情请见官方文档。或联系博主获取DAB ESTI 103461的中文翻译资料。

qq_15271231的博客 1219

EMC工程师职业发展:从测试整改到系统设计的进阶之路

电磁兼容(EMC)是确保电子设备在复杂电磁环境中可靠工作的关键技术,其核心在于控制电磁干扰(EMI)并提升抗扰度。其基本原理涉及电磁场理论、噪声耦合路径与滤波屏蔽技术。对于电子产品而言,EMC设计直接关系到能否通过CE、FCC等强制性认证,是产品上市和市场竞争力的关键。在工程实践中,EMC工程师需要从电路设计、PCB布局、元器件选型等源头入手,将EMC要求融入产品开发全流程,实现从后期“整改”到前期“设计预防”的价值跃迁。本文聚焦EMC工程师的核心能力体系构建与职业发展路径,深入探讨了如何从掌握标准测试、电

weixin_30819085的博客 388

bean的作用域_深入理解Spring中的Bean定义

在介绍Spring容器初始化细节之前,首先来介绍一个Spring中特别重要的概念,那就是Spring中的Bean定义,在之前的文章中已经有提到过这个名词。在生活中,描述一个人,通常会说这个人的性别,年龄,身高,体重,爱好,家庭住址等,这是对一个人的基本描述。那么在Spring中,定义一个Bean时,也需要这样来描述这个Bean的特征,例如Bean的名称,Bean对应的class类...

weixin_39688687的博客 352

STM32F407与W5100S的SPI通信实战:从硬件连接到TCP服务器搭建

本文详细介绍了STM32F407微控制器通过SPI接口驱动W5100S以太网模块,并搭建TCP服务器的完整实战过程。内容涵盖硬件连接、SPI驱动配置、网络参数设置及Socket编程,重点解析了SPI通信时序、W5100S寄存器操作和TCP连接管理,为嵌入式网络通信开发提供实用指南。

weixin_29173777的博客 193

Spring 的IoC容器中核心定义之------BeanDefinition深入分析

Spring 的IoC容器中核心定义之------BeanDefinition深入分析 Spring IoC 容器 Management 一个或多个 bean。这些 bean 是使用您提供给容器的配置元数据创建的(例如,以 XML <bean/>定义的形式)。 在容器本身内,这些 bean 定义表示为BeanDefinition对象,其中包含(除其他信息外)以下元数据: ...

qq_29860591的博客 637

告别手动画图!用SUMO的netedit快速搭建高速公路交织区路网(附完整XML文件)

本文详细介绍了如何使用SUMO的netedit工具高效构建高速公路交织区路网,避免手动绘图的低效与错误。通过实战案例和XML文件示例,帮助交通工程专业学生快速掌握复杂道路结构建模技巧,特别解析了spreadType参数设置和速度单位换算等关键操作。

weixin_29085865的博客 261

MPU6050芯片 寄存器详解与配置指南(详解)

分频值越小,数据刷新越快(如分频值 = 0 时,刷新率 = 8kHz/1=8kHz)。功能:配置采样频率分频系数,控制 ADC 转换速度和数据刷新率。数据刷新率 = 陀螺仪输出时钟频率 /(1 + 分频值)

m0_74696257的博客 1421

spring的beanDefinition是什么

在spring源码中,会涉及到bean和beanDefinition这两个概念,接下来,说下什么是bean,什么是beanDefinition

小小少年的博客 3600

别再折腾虚拟机了!手把手教你用WSL2在Windows 11上安装Kali Linux(含汉化与图形界面)

本文详细介绍了如何在Windows 11上通过WSL2安装和配置Kali Linux,包括汉化与图形界面设置。通过WSL2,用户可以享受接近原生性能的Linux体验,同时保持与Windows系统的无缝集成,特别适合网络安全爱好者和开发者。文章还提供了常见问题解决和性能优化建议,帮助用户高效使用Kali工具集。

weixin_42525369的博客 322

Spring IOC 之加载 BeanDefinition

文章从解析源码的角度分析IOC的初始化过程,从 Bean 资源的定位,转换为 Document 对象,接着对其进行解析,最后注册到 IOC 容器中,清晰的进行了讲解。通俗易懂,希望对你有所帮助,

小徐的博客 1345

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Spring高手之路11——BeanDefinition解密:构建和管理Spring Beans的基石

本文对BeanDefinition进行全面深入的探讨,涵盖BeanDefinition的接口方法、主要信息、类型以及生成过程等方面内容。旨在帮助读者全面理解BeanDefinition的各方面知识,并能够熟练应用。文章通俗易懂,具有很强的指导意义。

卓越无关环境,保持空杯心态——靡不有初,鲜克有终 8966

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Spring高手之路12——BeanDefinitionRegistry与BeanDefinition合并解析

本文深入探讨Spring的BeanDefinition和BeanDefinitionRegistry,详细介绍了BeanDefinition的合并过程及其源码分析,揭示了Spring配置元数据的内在逻辑。读者将通过本文理解Spring Bean定义的继承和重用机制,掌握如何动态注册BeanDefinition。

卓越无关环境,保持空杯心态——靡不有初,鲜克有终 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Spring中的BeanDefinition

BeanDefinition 是 Bean 的“元数据模型”,描述了一个 Bean 如何被创建和管理。它类似于一份“对象蓝图”,包含类类型、构造参数、属性注入、作用域、初始化方法等关键信息。Spring 不会直接把一个类实例作为 Bean 放入容器,而是先构建它对应的 BeanDefinition,再由容器根据这份定义创建最终 Bean。

zhangyifang_009的博客 773

Spring Framework:BeanDefinition 篇

IOC 容器:BeanDefinition 篇 参考文档: Spring 官方文档 《Spring 技术内幕:深入解析 Spring 架构与设计原理》 演示代码地址: https://github.com/xuliangliang1995/grasswort-spring 涉及问题 什么是配置元数据(ConfigurationMetadata)? 什么是 BeanDefinition ? BeanDefinition 与配置元数据的关系?包含了哪些配置元数据? 配置元数据有哪些表现形式?以及相应的载

qq_39220705的博客 278

Spring源码之BeanDefinition的加载

Spring提供了BeanDefinitionRegistry去操作BeanDefinition,BeanDefinitionRegistry接口具有增、删、查(这里的增删查指的是对存放BeanDefinition的集合进行操作)BeanDefinition的能力。通过上面的debug,目前已经知道了Spring怎么注册 配置类以及Processor的BeanDefinition,那么配置类中通过@Bean注解注册的Bean的BeanDefinition是在怎么时候注册的呢?

wsb_2526的博客 1291

Spring中的BeanDefinition系列(一)—— BeanDefinition

前言 ​ Bean是Spring中必不可少的一个组件,Bean之于Spring,就像是 员工之于公司。Spring把每个不一样的对象都封装成了Bean,就像是公司把每个不一样的人都封装成了员工。 ​ 一个BeanDefinition描述和定义了创建一个bean需要的所有信息,属性,构造函数参数以及访问它们的方法。还有其他一些信息,比如这些定义来源自哪个类等等。 自己设计BeanDefiniti...

LCDZhao的艺术世界 2394

Spring之BeanDefinition

BeanDefinition相关属性的源码解析及如何使用

好记性不如烂笔头 1428

Spring BeanDefinition详解

是最终全能实现类的基类,也是这些类的公同属性和公共逻辑的实现//默认的SCOPE,默认是单例publicstaticfinalStringSCOPE_DEFAULT="";//不进行自动装配publicstaticfinalintAUTOWIRE_NO=AutowireCapableBeanFactory.AUTOWIRE_NO;继承自AbstractBeanDefinition的全功能BeanDefinition实现类有httpshttpshttps。...

qq_43460095的博客 1975

深入了解 Spring 篇之 BeanDefinition 结构

BeanDefinition 是定义对 Bean 的接口是 spring 容器中最重要的一个接口,spring 围绕这个接口进行对象的创建以及对象中的属性注入。AbstractBeanDefinition 是整个 BeanDefinition 接口的抽象类,也是具体实现类的基础类,里面的属性内容基本含盖了 spring 的 IOC 的功能特点;RootBeanDefinition 在 spring 初始化 bean 实例过程所使用的复合对象。...

ch98000的博客 542

Spring是如何加载BeanDefinition的

在Spring加载Bean的过程中是无法感知每个Bean的,也无法知道每一个bean具体的特征,比如某个bean是单例还是原型,是否懒加载等等。所以Spring需要beandefinition来对每个不同的bean进行描述,并不是直接把Bean直接存入容器而是读取成beanDefinition,再根据BeanDefenition对bean的描述进行实例化。那么Spring是如何读取这些BeanDefinition的呢?

weixin_51110958的博客 612

掌握 Spring 必须知道的 BeanDefinition

BeanDefinition 描述了一个 bean 实例具有的构造方法参数和属性值等信息,是 Spring Bean 配置元信息在内存中的表现形式,涉及到 Spring Bean 的整个生命周期,掌握 Spring 必须对 BeanDefinition 进行理解。

大鹏的博客 1160
上一篇: spring中引入property文件的三种方式
yxLearnJava
博客等级 码龄10年 2粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值