当前位置: 首页 > news >正文

Spring boot之BeanDefinition介绍

在spring框架中IOC容器进行bean的创建和管理。Bean的创建是一个比较复杂的过程,它并不像我们创建对象一样只是直接new一下就行,虽然有些bean确实就是New一下。但在Spring中可以通过一些途径对bean进行增强扩展。在这个过程中,BeanDefinition作为bean定义,存储了bean创建所需要的信息,一个后置处理器也是通过修改BeanDefinition实现对bean的扩展和修改。所以今天我们来好好了解一下BeanDefinition接口。

        首先我们看一下BeanDefinition接口的描述

翻译一下:BeanDefinition是一个接口,它描述了一个具有属性值、构造参数值以及其他更多的信息,这些信息有具体的实现提供。

        它是一个最小的接口:主要目的是允许BeanFactoryPostProcessor去自检和修改属性值以及其他bean元数据。

        所以从BeanDefinition的描述就能大概知道它的用途。下面我们具体看看它的接口方法。它的方法大部分是set和get方法,从这些方法,我们大概能知道一个具体的bean定义实现会有哪些属性。如:set(get)BeanClassName,说明bean定义中包含beanClassName,这也是bean创建最基础的信息。以下对主要的信息做了整理:

        parentName:父级bean的名称,可以为空

        beanClassName:bean的类名

        scope:bean的作用域:单例还是原型

        lazyInit:是否延迟初始化

        dependsOn:依赖的bean,是个数组

        isAutowireCandidate:是否自动注入候选,此项只影响基于类型的注入,对于基于beanname的注入不生效。也就是@Autowire进行类型注入时,该bean如果匹配的话会被注入。如果设为false,那么将不会被注入。

        isPrimary:自动注入候选如果有多个匹配,那么表示了primary的会首选注入,如果都不是首选,会抛异常。

        factoryBeanName:bean的工厂名称,用于创建bean实例

        factoryMethodName:工厂方法名成,用于创建bean实例

        ConstructorArgumentValues:bean构造方法的参数

        PropertyValues:bean的属性值

        initMethodName:初始化方法

        destroyMethodName:销毁方法

        Role:用来描述一个 Bean 的角色,有三种角色:

                ROLE_APPLICATION 表示这个 Bean 是用户自己定义的 Bean

                ROLE_SUPPORT 表示这个 Bean 是某些复杂Configuration的支撑部分;        

                ROLE_INFRASTRUCTURE 表示这是一个 Spring 内部使用的 Bean

        ResolvableType:bean的可解析类型,通常包含类的superClass,泛型,数组的元素类型等

        isAbstract:是否抽象bean定义,如果是抽象bean,则不会被实例化

另外BeanDefinition接口继承了AttributeAccessor,BeanMetadataElement,使得可以在bean定义中设置额外的属性,可以简单理解相当于内部维护了一个Map<String, Object>结构的成员变量。比如会在Configuration配置类识别过程中,如果此bean定义是配置类的,那么设置CONFIGURATION_CLASS_ATTRIBUTE属性标识其为配置类。而后如果元数据中能获得order值则对其bean定义设置Order属性,以便后面进行排序。

可参见:

ConfigurationClassUtils.checkConfigurationClassCandidate方法,此方法作用是是检查bean定义是否配置类的

相关文章:

Spring boot之BeanDefinition介绍

在spring框架中IOC容器进行bean的创建和管理。Bean的创建是一个比较复杂的过程&#xff0c;它并不像我们创建对象一样只是直接new一下就行&#xff0c;虽然有些bean确实就是New一下。但在Spring中可以通过一些途径对bean进行增强扩展。在这个过程中&#xff0c;BeanDefinition作…...

30分钟学会正则表达式

正则表达式是对字符串操作的一种逻辑公式&#xff0c;就是用事先定义好的一些特定字符、及这些特定字符的组合&#xff0c;组成一个“规则字符串”&#xff0c;这个“规则字符串”用来表达对字符串的一种过滤逻辑。 作用 匹配 查看一个字符串是否符合正则表达式的语法 搜索 正…...

Python 自动化办公的 10 大脚本

大家好&#xff0c;我是你们的 Python 讲师&#xff01;今天我们将讨论 10 个实用的 Python 自动化办公脚本。这些脚本可以帮助你简化日常工作&#xff0c;提高效率。无论是处理 Excel 文件、发送邮件&#xff0c;还是自动化网页操作&#xff0c;Python 都能派上用场。 1. 批量…...

Python蒙特卡罗MCMC:优化Metropolis-Hastings采样策略Fisher矩阵计算参数推断应用—模拟与真实数据...

全文链接&#xff1a;https://tecdat.cn/?p38397 本文介绍了其在过去几年中的最新开发成果&#xff0c;特别阐述了两种有助于提升 Metropolis - Hastings 采样性能的新要素&#xff1a;跳跃因子的自适应算法以及逆 Fisher 矩阵的计算&#xff0c;该逆 Fisher 矩阵可用作提议密…...

成绩排序

成绩排序 C语言代码C 代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 给出班里某门课程的成绩单&#xff0c;请你按成绩从高到低对成绩单排序输出&#xff0c;如果有相同分数则名字字典序小的在前。 输入 第一行为…...

MySQL底层概述—7.优化原则及慢查询

大纲 1.Explain概述 2.Explain详解 3.索引优化数据准备 4.索引优化原则详解 5.慢查询设置与测试 6.慢查询SQL优化思路 1.Explain概述 使用Explain关键字可以模拟查询优化器来执行SQL查询语句&#xff0c;从而知道MySQL是如何处理SQL语句的&#xff0c;从而分析出查询语句…...

R““有什么作用在C++中,举例说明

在C中&#xff0c;R""&#xff08;双引号前加R&#xff09;表示一个原始字符串字面量&#xff08;Raw String Literal&#xff09;&#xff0c;其主要作用是让字符串中的反斜杠\和其他特殊字符不被当作转义字符处理&#xff0c;而是保留其原始字面意义。这在处理包含…...

linux中top 命令返回数据解释

当您在 Linux 终端中运行 top 命令时,它会显示一个动态更新的系统状态视图,其中包括许多有关系统性能的数据。下面是对 top 命令返回数据的详细解释: 标题栏 top - 22:46:12 up 2 days, 3:14, 1 user, load average: 0.05, 0.07, 0.09 22:46:12:当前时间。up 2 days, 3:14…...

深入理解二叉树及其变体:平衡二叉树、红黑树、B-树和B+树

一、二叉树简介 二叉树是一种非常常见的数据结构&#xff0c;它具有以下特点&#xff1a; 每个节点最多有两个子节点&#xff0c;分别称为左子节点和右子节点。每个节点的左子树和右子树都是二叉树。 二叉树的常见操作包括&#xff1a;创建、插入、删除、查找、遍历等。下面…...

C++ 编程技巧之StrongType(1)

最近看到一个NamedType的开源库&#xff0c;被里面的Strong Type这个概念和里面的模版实现给秀了一脸&#xff0c;特此总结学习一下 GitHub - joboccara/NamedType: Implementation of strong types in C C本身是一种强类型语言&#xff0c;类型包括int、double等这些build i…...

芯片测试-smith圆图

smith圆图 &#x1f4a2;smith圆图的故事&#x1f4a2;&#x1f4a2;smith圆图中的各部分来历&#x1f4a2;&#x1f4a2;公式推导&#x1f4a2;&#x1f4a2;等电阻圆特点&#x1f4a2;&#x1f4a2;等电抗圆&#x1f4a2;&#x1f4a2;等电抗圆特点&#x1f4a2; &#x1f4a…...

HTML技术深度解析:构建现代网页的基石

引言 HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是构建网页和网上应用的标准标记语言。随着互联网技术的飞速发展&#xff0c;HTML已经成为前端开发中不可或缺的核心技术之一。本文将深入探讨HTML的基本概念、核心元素、最新发展以及在…...

Leecode刷题C语言之判断是否可以赢得数字游戏

执行结果:通过 执行用时和内存消耗如下&#xff1a; bool canAliceWin(int* nums, int numsSize) {int single_digit_sum 0;int double_digit_sum 0;for (int i 0; i < numsSize; i) {if (nums[i] < 10) {single_digit_sum nums[i];} else {double_digit_sum nums[…...

Ubuntu 关机命令

在 Ubuntu 系统中&#xff0c;有几种方法可以关机。以下是常用的关机命令及其说明&#xff1a; 1. 使用 shutdown 命令 shutdown 命令是最常用和最灵活的关机方式。它可以设置定时关机&#xff0c;并且可以发送警告消息给所有登录用户。 立即关机 sudo shutdown now定时关机…...

数据采集中,除了IP池的IP被封,还有哪些常见问题?

在数据采集的过程中&#xff0c;代理IP池的使用无疑为我们打开了一扇通往信息宝库的大门。然而&#xff0c;除了IP被封禁这一常见问题外&#xff0c;还有许多其他问题可能影响数据采集的效果。本文将探讨在数据采集中&#xff0c;除了IP被封之外&#xff0c;还可能遇到的一些常…...

【Anaconda】 创建环境报错:CondaHTTPError: HTTP 000 CONNECTION FAILED for url

问题描述 使用 Anaconda 创建环境时报错&#xff1a; CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/free/noarch/repodata.json.bz2> Elapsed: -An HTTP error occurred when trying to retrieve this URL. HTTP errors are o…...

社交电商破局之“2+1 链动模式 O2O 商城小程序源码”赋能流量困境突围

摘要&#xff1a;本文聚焦于当下商家在流量困境中挣扎的现状&#xff0c;剖析传统电商高流量成本、平台流量获取难等痛点&#xff0c;阐述私域流量池兴起的缘由与价值。重点探究“21 链动模式 O2O 商城小程序源码”如何融入社交电商架构&#xff0c;通过创新机制与线上线下融合…...

【ArcGIS Pro微课1000例】0062:ArcGIS Pro3.3.1中文版安装教程(附安装包下载)

本文讲述ArcGIS Pro3.3.1中文版安装教程(附安装包下载)。 文章目录 一、ArcGIS Pro3.3.1中文版下载二、ArcGIS Pro3.3.1中文版安装一、ArcGIS Pro3.3.1中文版下载 【订阅专栏】,获取完整安装包及专栏配套实验数据。下载后解压,如下图所示: 二、ArcGIS Pro3.3.1中文版安装…...

Linux - web服务器

四、web服务器 1、基础知识 URL&#xff1a;Uniform Resource Locator&#xff0c;统一资源定位符&#xff0c;对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示&#xff0c;是互联网上标准资源的地址。 网址格式&#xff1a;<协议>://<主机或主机名&g…...

设计模式-适配器模式-注册器模式

设计模式-适配器模式-注册器模式 适配器模式 如果开发一个搜索中台&#xff0c;需要适配或接入不同的数据源&#xff0c;可能提供的方法参数和平台调用的方法参数不一致&#xff0c;可以使用适配器模式 适配器模式通过封装对象将复杂的转换过程隐藏于幕后。 被封装的对象甚至…...

炉石传说脚本Hearthstone-Script:三步从零到精通的自动化游戏指南 [特殊字符]

炉石传说脚本Hearthstone-Script&#xff1a;三步从零到精通的自动化游戏指南 &#x1f3ae; 【免费下载链接】Hearthstone-Script Hearthstone script&#xff08;炉石传说脚本&#xff09;&#xff08;2024.01.25停更至国服回归&#xff09; 项目地址: https://gitcode.com…...

《机器学习》实战指南:从理论到代码的完整学习路径

1. 机器学习入门&#xff1a;从零开始的认知地图 第一次接触机器学习时&#xff0c;我被各种算法名词轰炸得头晕目眩——就像走进一家陌生的超市&#xff0c;货架上摆满看不懂标签的罐头。后来才发现&#xff0c;掌握机器学习的关键在于建立正确的认知框架。这里分享我摸索出的…...

FLUX.1-dev像素生成器实战:生成符合NES/SNES调色板限制的合法像素图

FLUX.1-dev像素生成器实战&#xff1a;生成符合NES/SNES调色板限制的合法像素图 1. 像素艺术生成新纪元 在数字艺术创作领域&#xff0c;像素艺术正经历一场由AI驱动的复兴。传统像素画创作需要艺术家手动放置每个像素&#xff0c;而现代AI技术可以智能生成符合经典游戏机调色…...

Beyond Compare 5 终极激活指南:本地密钥生成工具完整教程

Beyond Compare 5 终极激活指南&#xff1a;本地密钥生成工具完整教程 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen Beyond Compare 5 是一款专业的文件对比与合并工具&#xff0c;广泛应用于…...

# React 发散创新:从状态管理到组件化架构的极致实践在前端开发领域,React

React 发散创新&#xff1a;从状态管理到组件化架构的极致实践 在前端开发领域&#xff0c;React 已经成为构建现代 Web 应用的事实标准。但你是否曾思考过——如何让 React 不只是“写页面”&#xff0c;而是真正成为驱动业务逻辑的核心引擎&#xff1f; 本文将带你突破常规思…...

投资回报不到 1 年!这套导热油炉处理油泥减量化方案,凭什么火遍行业?

行业痛点&#xff1a;油泥处置面临的严峻挑战随着环保政策日趋严格&#xff0c;HW08类含油污泥的处理已成为石化、炼油等企业的必答题。然而&#xff0c;传统处理方式面临四大核心痛点&#xff1a;成本压力巨大&#xff1a;传统焚烧处置费用高达3000-5000元/吨&#xff0c;填埋…...

Cosmos-Reason1-7B保姆级教程:从NVIDIA模型下载到浏览器界面可用全流程

Cosmos-Reason1-7B保姆级教程&#xff1a;从NVIDIA模型下载到浏览器界面可用全流程 本文面向想要快速上手Cosmos-Reason1-7B推理工具的初学者&#xff0c;无需深厚技术背景&#xff0c;跟着步骤操作即可完成本地部署和使用。 1. 工具简介&#xff1a;你的本地推理助手 Cosmos-…...

从半加器到四位加法器:在Intel Quartus里玩转模块化设计与层次化视图

从半加器到四位加法器&#xff1a;Intel Quartus中的模块化设计实战 引言 在数字电路设计的浩瀚宇宙中&#xff0c;加法器就像是最基础的原子结构&#xff0c;简单却蕴含着无限可能。作为一名FPGA开发者&#xff0c;我常常思考如何让设计既高效又优雅。记得第一次在Quartus中完…...

STM32WU55蓝牙开发避坑指南:从官方例程到8通道肌电信号传输实战

STM32WU55蓝牙开发避坑指南&#xff1a;从官方例程到8通道肌电信号传输实战 当肌电信号采集遇上低功耗蓝牙&#xff0c;工程师们往往面临一个尴尬的平衡&#xff1a;既要满足医疗级数据精度&#xff0c;又要兼顾穿戴设备的续航需求。STM32WU55系列以其双核架构和集成射频模块&a…...

小白必看:Ollama部署translategemma-12b-it图文翻译模型完整流程

小白必看&#xff1a;Ollama部署translategemma-12b-it图文翻译模型完整流程 1. 准备工作与环境搭建 1.1 系统要求与安装Ollama 在开始部署translategemma-12b-it模型前&#xff0c;请确保您的系统满足以下基本要求&#xff1a; 操作系统&#xff1a;支持Windows 10/11&…...