BeanDefinition作用

BeanDefinition接口

BeanDefinition 描述一个 Bean 实例,这个实例有哪些属性值、构造函数以及一些其他信息,就是描述Bean实例的信息。

BeanDefinition是一个接口,允许BeanFactoryPostProcessor 内省和修改属性值和其他 Bean 元数据。
点击了解BeanFactoryPostProcessor

意义

在这里插入图片描述
在spring流程中是现有BeanDefinition再有bean,bean是根据BeanDefinition中的信息去创建的,当然在还没创建bean的时候还可以修改BeanDefinition中的信息,这个就是BeanFactoryPostProcessor 接口的主要功能,如我们在xml中定义的${jdbc.name}最终替换为真正的值就是在实现BeanFactoryPostProcessor 接口完成的。

源码

package org.springframework.beans.factory.config;import org.springframework.beans.BeanMetadataElement;
import org.springframework.beans.MutablePropertyValues;
import org.springframework.core.AttributeAccessor;
import org.springframework.core.ResolvableType;
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} 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 {/*** Scope identifier for the standard singleton scope: {@value}.* <p>Note that extended bean factories might support further scopes.* @see #setScope* @see ConfigurableBeanFactory#SCOPE_SINGLETON*/String SCOPE_SINGLETON = ConfigurableBeanFactory.SCOPE_SINGLETON;/*** Scope identifier for the standard prototype scope: {@value}.* <p>Note that extended bean factories might support further scopes.* @see #setScope* @see ConfigurableBeanFactory#SCOPE_PROTOTYPE*/String SCOPE_PROTOTYPE = ConfigurableBeanFactory.SCOPE_PROTOTYPE;/*** Role hint indicating that a {@code BeanDefinition} is a major part* of the application. Typically corresponds to a user-defined bean.*/int ROLE_APPLICATION = 0;/*** Role hint indicating that a {@code BeanDefinition} is a supporting* part of some larger configuration, typically an outer* {@link org.springframework.beans.factory.parsing.ComponentDefinition}.* {@code SUPPORT} beans are considered important enough to be aware* of when looking more closely at a particular* {@link org.springframework.beans.factory.parsing.ComponentDefinition},* but not when looking at the overall configuration of an application.*/int ROLE_SUPPORT = 1;/*** Role hint indicating that a {@code BeanDefinition} is providing an* entirely background role and has no relevance to the end-user. This hint is* used when registering beans that are completely part of the internal workings* of a {@link org.springframework.beans.factory.parsing.ComponentDefinition}.*/int ROLE_INFRASTRUCTURE = 2;// Modifiable attributes/*** Set the name of the parent definition of this bean definition, if any.*/void setParentName(@Nullable String parentName);/*** Return the name of the parent definition of this bean definition, if any.*/@NullableString getParentName();/*** Specify the bean class name of this bean definition.* <p>The class name can be modified during bean factory post-processing,* typically replacing the original class name with a parsed variant of it.* @see #setParentName* @see #setFactoryBeanName* @see #setFactoryMethodName*/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()*/@NullableString getBeanClassName();/*** Override the target scope of this bean, specifying a new scope name.* @see #SCOPE_SINGLETON* @see #SCOPE_PROTOTYPE*/void setScope(@Nullable String scope);/*** Return the name of the current target scope for this bean,* or {@code null} if not known yet.*/@NullableString getScope();/*** Set whether this bean should be lazily initialized.* <p>If {@code false}, the bean will get instantiated on startup by bean* factories that perform eager initialization of singletons.*/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();/*** Set the names of the beans that this bean depends on being initialized.* The bean factory will guarantee that these beans get initialized first.* <p>Note that dependencies are normally expressed through bean properties or* constructor arguments. This property should just be necessary for other kinds* of dependencies like statics (*ugh*) or database preparation on startup.*/void setDependsOn(@Nullable String... dependsOn);/*** Return the bean names that this bean depends on.*/@NullableString[] getDependsOn();/*** Set whether this bean is a candidate for getting autowired into some other bean.* <p>Note that this flag is designed to only affect type-based autowiring.* It does not affect explicit references by name, which will get resolved even* if the specified bean is not marked as an autowire candidate. As a consequence,* autowiring by name will nevertheless inject a bean if the name matches.*/void setAutowireCandidate(boolean autowireCandidate);/*** Return whether this bean is a candidate for getting autowired into some other bean.*/boolean isAutowireCandidate();/*** Set whether this bean is a primary autowire candidate.* <p>If this value is {@code true} for exactly one bean among multiple* matching candidates, it will serve as a tie-breaker.* @see #setFallback*/void setPrimary(boolean primary);/*** Return whether this bean is a primary autowire candidate.*/boolean isPrimary();/*** Set whether this bean is a fallback autowire candidate.* <p>If this value is {@code true} for all beans but one among multiple* matching candidates, the remaining bean will be selected.* @since 6.2* @see #setPrimary*/void setFallback(boolean fallback);/*** Return whether this bean is a fallback autowire candidate.* @since 6.2*/boolean isFallback();/*** Specify the factory bean to use, if any.* This is the name of the bean to call the specified factory method on.* <p>A factory bean name is only necessary for instance-based factory methods.* For static factory methods, the method will be derived from the bean class.* @see #setFactoryMethodName* @see #setBeanClassName*/void setFactoryBeanName(@Nullable String factoryBeanName);/*** Return the factory bean name, if any.* <p>This will be {@code null} for static factory methods which will* be derived from the bean class instead.* @see #getFactoryMethodName()* @see #getBeanClassName()*/@NullableString getFactoryBeanName();/*** Specify a factory method, if any. This method will be invoked with* constructor arguments, or with no arguments if none are specified.* The method will be invoked on the specified factory bean, if any,* or otherwise as a static method on the local bean class.* @see #setFactoryBeanName* @see #setBeanClassName*/void setFactoryMethodName(@Nullable String factoryMethodName);/*** Return a factory method, if any.* @see #getFactoryBeanName()* @see #getBeanClassName()*/@NullableString 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* @see #getConstructorArgumentValues()*/default boolean hasConstructorArgumentValues() {return !getConstructorArgumentValues().isEmpty();}/*** Return the property values to be applied to a new instance of the bean.* <p>The returned instance can be modified during bean factory post-processing.* @return the MutablePropertyValues object (never {@code null})*/MutablePropertyValues getPropertyValues();/*** Return if there are property values defined for this bean.* @since 5.0.2* @see #getPropertyValues()*/default boolean hasPropertyValues() {return !getPropertyValues().isEmpty();}/*** Set the name of the initializer method.* @since 5.1*/void setInitMethodName(@Nullable String initMethodName);/*** Return the name of the initializer method.* @since 5.1*/@NullableString getInitMethodName();/*** Set the name of the destroy method.* @since 5.1*/void setDestroyMethodName(@Nullable String destroyMethodName);/*** Return the name of the destroy method.* @since 5.1*/@NullableString getDestroyMethodName();/*** Set the role hint for this {@code BeanDefinition}. The role hint* provides the frameworks as well as tools an indication of* the role and importance of a particular {@code BeanDefinition}.* @since 5.1* @see #ROLE_APPLICATION* @see #ROLE_SUPPORT* @see #ROLE_INFRASTRUCTURE*/void setRole(int role);/*** Get the role hint for this {@code BeanDefinition}. The role hint* provides the frameworks as well as tools an indication of* the role and importance of a particular {@code BeanDefinition}.* @see #ROLE_APPLICATION* @see #ROLE_SUPPORT* @see #ROLE_INFRASTRUCTURE*/int getRole();/*** Set a human-readable description of this bean definition.* @since 5.1*/void setDescription(@Nullable String description);/*** Return a human-readable description of this bean definition.*/@NullableString getDescription();// Read-only attributes/*** Return a resolvable type for this bean definition,* based on the bean class or other specific metadata.* <p>This is typically fully resolved on a runtime-merged bean definition* but not necessarily on a configuration-time definition instance.* @return the resolvable type (potentially {@link ResolvableType#NONE})* @since 5.2* @see ConfigurableBeanFactory#getMergedBeanDefinition*/ResolvableType getResolvableType();/*** 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();/*** Return whether this bean is "abstract", that is, not meant to be instantiated* itself but rather just serving as parent for concrete child bean definitions.*/boolean isAbstract();/*** Return a description of the resource that this bean definition* came from (for the purpose of showing context in case of errors).*/@NullableString getResourceDescription();/*** Return the originating BeanDefinition, or {@code null} if none.* <p>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.*/@NullableBeanDefinition getOriginatingBeanDefinition();}
方法签名中文解释
void setParentName(@Nullable String parentName)设置该 bean 定义的父定义的名称(如果有)。
@Nullable String getParentName()返回该 bean 定义的父定义的名称(如果有)。
void setBeanClassName(@Nullable String beanClassName)指定该 bean 定义的 bean 类名称。
@Nullable String getBeanClassName()返回该 bean 定义的当前 bean 类名称。
void setScope(@Nullable String scope)重写该 bean 的目标范围,指定新的范围名称。
@Nullable String getScope()返回该 bean 当前目标范围的名称,或如果尚不清楚则返回 null。
void setLazyInit(boolean lazyInit)设置该 bean 是否应延迟初始化。
boolean isLazyInit()返回该 bean 是否应延迟初始化,即不在启动时急切实例化。仅适用于单例 bean。
void setDependsOn(@Nullable String… dependsOn)设置该 bean 依赖于初始化的 bean 的名称。
@Nullable String[] getDependsOn()返回该 bean 依赖的 bean 名称。
void setAutowireCandidate(boolean autowireCandidate)设置该 bean 是否是某些其他 bean 自动装配的候选者。
boolean isAutowireCandidate()返回该 bean 是否是某些其他 bean 自动装配的候选者。
void setPrimary(boolean primary)设置该 bean 是否是主要自动装配候选者。
boolean isPrimary()返回该 bean 是否是主要自动装配候选者。
void setFallback(boolean fallback)设置该 bean 是否是后备自动装配候选者。
boolean isFallback()返回该 bean 是否是后备自动装配候选者。
void setFactoryBeanName(@Nullable String factoryBeanName)指定要使用的工厂 bean(如果有)。这是调用指定工厂方法的 bean 的名称。
@Nullable String getFactoryBeanName()返回工厂 bean 名称(如果有)。
void setFactoryMethodName(@Nullable String factoryMethodName)指定工厂方法(如果有)。此方法将使用构造函数参数调用,或者如果没有指定参数则不带参数调用。
@Nullable String getFactoryMethodName()返回工厂方法(如果有)。
ConstructorArgumentValues getConstructorArgumentValues()返回该 bean 的构造函数参数值。返回的实例可以在 bean 工厂后处理期间进行修改。
boolean hasConstructorArgumentValues()返回是否定义了该 bean 的构造函数参数值。
MutablePropertyValues getPropertyValues()返回应用于该 bean 的新实例的属性值。返回的实例可以在 bean 工厂后处理期间进行修改。
boolean hasPropertyValues()返回是否为该 bean 定义了属性值。
void setInitMethodName(@Nullable String initMethodName)设置初始化方法的名称。
@Nullable String getInitMethodName()返回初始化方法的名称。
void setDestroyMethodName(@Nullable String destroyMethodName)设置销毁方法的名称。
@Nullable String getDestroyMethodName()返回销毁方法的名称。
void setRole(int role)设置该 BeanDefinition 的角色提示。
int getRole()获取该 BeanDefinition 的角色提示。
void setDescription(@Nullable String description)设置该 bean 定义的人类可读描述。
@Nullable String getDescription()返回该 bean 定义的人类可读描述。
ResolvableType getResolvableType()返回基于 bean 类或其他特定元数据的可解析类型。
boolean isSingleton()返回此 bean 是否为单例,所有调用都返回单个共享实例。
boolean isPrototype()返回此 bean 是否为原型,每次调用返回一个独立的实例。
boolean isAbstract()返回此 bean 是否为抽象,即不是用于实例化自身,而是作为具体子 bean 定义的父类。
@Nullable String getResourceDescription()返回该 bean 定义的资源描述(用于在出现错误时显示上下文)。
@Nullable BeanDefinition getOriginatingBeanDefinition()返回原始的 BeanDefinition,如果没有则返回 null。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/14191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【加密与解密(第四版)】第十五章笔记

第十五章 专用加密软件 15.1 认识壳 15.2 压缩壳 UPX、ASPack、PECompact 15.3 加密壳 ASProtect(压缩、加密、反跟踪代码、CRC校验、花指令)、Armadillo(穿山甲)、EXECryptor、Themida 15.4 虚拟机保护软件 虚拟机引擎&#xff08;编译器解释器虚拟CPU环境指令系统&#xff…

小型发电机不发电原因和解决方法

小型发电机不发电可能由多种原因造成&#xff0c;以下是一些常见原因及其解决方法&#xff1a; 1.电池电量不足&#xff1a;小型发电机通常需要电池来启动。如果电池电量不足&#xff0c;可能导致发电机无法启动。此时&#xff0c;您可以使用充电设备对电池进行充电&#xff0…

Color预设颜色测试

"AliceBlue", "获取 ARGB 值为 的系统 #FFF0F8FF定义颜色。", "AntiqueWhite", "获取 ARGB 值为 的系统 #FFFAEBD7定义颜色。", "Aqua", "获取 ARGB 值为 的系统 #FF00FFFF定义颜色。", "Aquamarine"…

深度学习TensorFlow和Keras建立CNN模型口罩检测

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着新型冠状病毒&#xff08;COVID-19&#xff09;的爆发&#xff0c;口罩成为了公众防护的重要工具…

智能的PHP开发工具PhpStorm v2024.1全新发布——支持PHPUnit 11.0

PhpStorm是一个轻量级且便捷的PHP IDE&#xff0c;其旨在提高用户效率&#xff0c;可深刻理解用户的编码&#xff0c;提供智能代码补全&#xff0c;快速导航以及即时错误检查。可随时帮助用户对其编码进行调整&#xff0c;运行单元测试或者提供可视化debug功能。 立即获取PhpS…

【AD21】PCB板尺寸与层名称标注

PCB绘制完成后&#xff0c;需要给上级或生产制造商发送输出文件&#xff0c;输出文件中包含板尺寸标识和层标识可以方便工作的交接。 1. 板尺寸标识 首先板尺寸标识所在的层要在与板框不同的机械层&#xff0c;这里我选择机械5层。 点击放置->尺寸->线性尺寸 这里板尺…

开源绘图工具Rnote使用体验分享

软件介绍 Rnote,这款致力于提供矢量绘图、手写笔记以及文档注释功能的免费开源软件,逐渐成为了学生、教师以及绘图板用户的新宠。其独特之处在于,它不仅支持PDF和图片的导入导出,还拥有无限画布和适应各种屏幕大小的界面设计,这些功能使得Rnote在众多同类软件中脱颖而出。…

Boxy SVG for Mac:打造精致矢量图形的得力助手

在矢量图形设计领域&#xff0c;Boxy SVG for Mac以其出色的性能和丰富的功能&#xff0c;成为了设计师们的得力助手。 Boxy SVG for Mac(矢量图编辑器) v4.32.0免激活版下载 Boxy SVG具备强大的编辑能力&#xff0c;支持节点编辑、路径绘制、颜色填充等多种操作&#xff0c;让…

最新腾讯音乐人挂机脚本,号称日赚300+【永久脚本+使用教程】

项目介绍 首先需要认证腾讯音乐人&#xff0c;上传自己的歌曲&#xff0c;然后用小号通过脚本去刷自己的歌曲 &#xff0c;赚取播放量 &#xff0c;1万播放大概就是50到130之间 腾讯认证不需要露脸&#xff0c;不吞量&#xff0c;不封号 脚本&#xff0c;全自动无脑挂机&…

pyecharts 输出空白不显示图形的解决办法

20240520补充&#xff1a; pyecharts在JupyterLab中无法显示的解决方案-CSDN博客 可以不用再看下面降级 notebook 的方法了&#xff0c;主要的原因是 pyecharts 在 notebook 7 之后使用了 JUPYTER_LAB 来画图了&#xff0c;看上面篇文章就可以了。 问题&#xff1a; 全新安…

Redis篇 有关Redis的认识和Redis的特性应用场景

Redis 一. Redis的基本概念1.1 应用/系统1.2 模块/组件1.3 分布式1.4 集群1.5 主/从1.6 中间件1.7 可用性1.8 响应时长1.9 吞吐 二.Redis的特性三.使用场景 一. Redis的基本概念 1.1 应用/系统 一个应用就是一个组,一个服务器程序 1.2 模块/组件 一个应用,里面有很多功能,每个…

Ceph集群RBD块存储:快照与Copy-on-Write克隆的基本操作

文章目录 1.RBD块存储镜像克隆概念2.copy-on-write克隆的基本使用2.1.在块存储中创建一个快照2.2.将快照配置成保护模式2.3.基于快照克隆出镜像2.4.使用克隆的镜像2.5.查看一个快照下有哪些克隆的镜像 1.RBD块存储镜像克隆概念 镜像克隆官方文档&#xff1a;https://docs.ceph…

飞睿智能超宽带UWB标签模组,简化设备开发流程,实时高速率数传交互应用

在科技飞速发展的今天&#xff0c;UWB超宽带技术因其高精度、低功耗和高安全性的特点&#xff0c;正逐渐成为智能设备定位和数据传输的新宠。 UWB技术是一种无线通信技术&#xff0c;它通过使用非常宽的频带进行数据传输&#xff0c;从而实现高数据传输速率和高精度定位。 飞…

【机器学习】基于核的机器学习算法应用

大数据时代下&#xff0c;基于核的机器学习算法&#xff1a;原理、应用与未来展望 一、引言二、核函数的概念与重要性三、基于核的算法原理与步骤四、基于核的算法应用实例五、总结与展望 一、引言 在大数据时代的浪潮下&#xff0c;数据的价值被无限放大&#xff0c;而如何高…

java操作Redis缓存设置过期时间

如何用java操作Redis缓存设置过期时间&#xff1f;很多新手对此不是很清楚&#xff0c;为了帮助大家解决这个难题&#xff0c;下面小编将为大家详细讲解&#xff0c;有这方面需求的人可以来学习下&#xff0c;希望你能有所收获。 在应用中我们会需要使用redis设置过期时间&…

华为云认证和阿里云认证区别在哪?建议考哪个?

在云计算的浪潮中&#xff0c;专业认证成为提升个人技能和职场竞争力的重要途径。 华为云认证和阿里云认证&#xff0c;作为两大国内云服务商提供的专业技术认证&#xff0c;各自承载着不同的特点和行业认可度&#xff0c;各自以独特的优势服务于企业和个人。 对于追求专业成长…

vue三级联动组件

背景 项目中经常出现三级下拉框组件的要求&#xff0c;这种组件其中一级发生变化&#xff0c;子级的组件就会发生变化如果这一个组件&#xff0c;单独作为搜索条件使用&#xff0c;很好写&#xff0c;同时作为搜索条件和form回写组件&#xff0c;回显就比较困难 子组件代码 将与…

FaceFusion源码框架解读

FaceFusion源码框架解读 我的视频讲解&#xff1a;FaceFusion入门教学 FaceFusion官网 FaceFusion是一款开源的AI换脸工具&#xff0c;一款非常好用的换脸工具&#xff0c;操作简单&#xff0c;上手容易。 Facefusion&#xff1a;GitHub - facefusion/facefusion: Next gene…

我怎么使用AI大语言模型学英语

今天已经是我开始英语拉练任务的第39天了&#xff0c;一直在笃定的、雷打不动的、机械笨拙的重复做一件事&#xff0c;那就是使用AI工具&#xff0c;将我想要说的话翻译成英文&#xff0c;生成语音文件&#xff0c;每天朗读三小时&#xff0c;最终整个背下来。我也在思考&#…

【Java】手把手学会数组的使用

数组的基本用法 创建数组 基本语法&#xff1a; // 动态初始化 数据类型 [] 数组名称 new 数据类型 [] { 初始化数据 }; // 静态初始化 数据类型 [] 数组名称 { 初始化数据 }; 代码示例&#xff1a; int[] array1 {1,2,3,4,5};int[] array2 new int[]…