目录

BeanDefinition接口

代码片段

作用

BeanDefinitionRegistry接口

代码片段

作用

RootBeanDefinition实现类

GenericBeanDefinition实现类


BeanDefinition接口

代码片段

public interface BeanDefinition {// ...void setScope(@Nullable String scope);@NullableString getScope();void setLazyInit(boolean lazyInit);boolean isLazyInit();void setDependsOn(@Nullable String... dependsOn);@NullableString[] getDependsOn();boolean isSingleton();boolean isPrototype();boolean isAbstract();// ...
}

作用

存储Bean的定义信息,Spring通过Bean对应的BeanDefinition中的信息来判断该Bean是否单例,是否懒加载,是否抽象,是否依赖于其它的Bean等等

BeanDefinitionRegistry接口

代码片段

public interface BeanDefinitionRegistry extends AliasRegistry {// 往容器中添加BeanDefinitionvoid registerBeanDefinition(String beanName, BeanDefinition beanDefinition)throws BeanDefinitionStoreException;// 删除容器中指定的BeanDefinitionvoid removeBeanDefinition(String beanName) throws NoSuchBeanDefinitionException;// 获取容器中指定的BeanDefinitionBeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException;// 判断容器中是否包含指定的BeanDefinitionboolean containsBeanDefinition(String beanName);// 获取容器中所有BeanDefinition的nameString[] getBeanDefinitionNames();// 统计容器中BeanDefinition的个数int getBeanDefinitionCount();// ...}

作用

提供对Spring容器中BeanDefinition进行操作的方法

RootBeanDefinition实现类

public static Set<BeanDefinitionHolder> registerAnnotationConfigProcessors(BeanDefinitionRegistry registry, @Nullable Object source) {// ...// 这里Spring使用了RootBeanDefinition将内部组件Bean对象的BeanDefinition添加到容器中if (!registry.containsBeanDefinition(CONFIGURATION_ANNOTATION_PROCESSOR_BEAN_NAME)) {RootBeanDefinition def = new RootBeanDefinition(ConfigurationClassPostProcessor.class);def.setSource(source);beanDefs.add(registerPostProcessor(registry, def, CONFIGURATION_ANNOTATION_PROCESSOR_BEAN_NAME));}// ...
}private static BeanDefinitionHolder registerPostProcessor(BeanDefinitionRegistry registry, RootBeanDefinition definition, String beanName) {// ...// 添加BeanDefinition到Spring容器中registry.registerBeanDefinition(beanName, definition);// ...}

GenericBeanDefinition实现类

/*** 普通Java类,没有加任何注解*/
public class Teacher {
}
public class SpringMain {public static void main(String[] args) {// Spring容器DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();// 构建GenericBeanDefinition对象GenericBeanDefinition beanDefinition = new GenericBeanDefinition();beanDefinition.setBeanClass(Teacher.class);// 将GenericBeanDefinition放入Spring容器beanFactory.registerBeanDefinition("teacher", beanDefinition);// 从容器中获取Bean对象Teacher teacherBean = beanFactory.getBean(Teacher.class);// 获取到Bean对象:xxxx.Teacher@279ad2e3System.out.println(teacherBean);}
}

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

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

相关文章

GD32VW553-IOT LED呼吸灯项目

GD32VW553-IOT LED呼吸灯项目项目简介这是一个基于GD32VW553-IOT开发板的LED呼吸灯演示项目。通过PWM技术控制LED亮度&#xff0c;实现多种呼吸灯效果&#xff0c;展示RISC-V MCU的PWM功能和实时控制能力。功能特性1. 多种呼吸灯效果正弦波呼吸&#xff1a;自然平滑的呼吸效果线…

Linux(Ubuntu)硬盘使用情况解析(已房子举例)

文章目录前言输出字段详解1.核心字段说明2.生活化的方式解释&#xff08;已房间为例&#xff09;3.重点理解①主卧室 (/)​​②​​临时房 (tmpfs)​​总结前言 “df -h” 是在 Linux ​​检查磁盘空间状态的最基本、最常用的命令之一​​。当发现系统变慢、程序报错说“磁盘空…

vue中的this.$set

在 Vue 2 中&#xff0c;this.$set 是一个用于响应式地添加新属性到已有对象的全局 API。它的主要作用是解决 Vue 无法检测到对象属性添加或删除的限制&#xff08;由于 Vue 2 的响应式系统基于 Object.defineProperty 实现&#xff09;。1. 为什么需要 this.$set&#xff1f; …

python爬虫技术——基础知识、实战

参考文献&#xff1a; Python爬虫入门(一)&#xff08;适合初学者&#xff09;-CSDN博客 一、常用爬虫工具包 Scrapy 语言: Python特点: 高效、灵活的爬虫框架&#xff0c;适合大型爬虫项目。 BeautifulSoup 语言: Python特点: 用于解析HTML和XML&#xff0c;简单易用。 Sel…

QT 交叉编译环境下,嵌入式设备显示字体大小和QT Creator 桌面显示不一致问题解决

第一步&#xff1a; 发送fc-list 命令 &#xff0c;查找嵌入式环境下支持的字库第二步 为每个控件指定字库文件&#xff0c;以label控件为例&#xff1a;int fontId QFontDatabase::addApplicationFont("/usr/share/fonts/source-han-sans-cn/SourceHanSansCN-Normal.otf…

php生成二维码

<?php // 包含qrlib库 require_once(qrlib.php);// 二维码内容 $data https://www.example.com;// 生成二维码图片的文件名 $filename qrcode.png;// 二维码参数 $errorCorrectionLevel L; // 错误纠正级别 $matrixPointSize 5; // 生成图片大小// 生成二维码 QR…

#systemverilog# 关键字之 变量声明周期与静态方法关系探讨

我们先看来年下面的代码: class test; task static bar(); …… endtask class test; static task bar(); …… endtask 在 SystemVerilog 中,这两种声明方式有本质区别,涉及方法的静态/非静态属性以及局部变量的生命周期。 1. task static bar(); ... endt…

vim与 neovim 的使用

使用 Vim 阅读 Linux 内核源码是一种高效、轻量级的方式。Linux 源码工程非常庞大&#xff0c;因此推荐你结合 Vim 的一些插件和功能来提高代码导航和阅读效率。 下面是一个完整的指南&#xff0c;帮你用 Vim 更高效地阅读 Linux 源码。 &#x1f527; 一、准备工作 1. 克隆 …

编译原理第六到七章(知识点学习/期末复习/笔试/面试)

第六章 句法制导翻译概述句法制导翻译概述什么是句法制导翻译编译的阶段&#xff1a;词法分析→句法分析→语义分析→中间代码生成→代码优化→目标代码生成语义翻译&#xff1a;语义分析和中间代码生成句法制导翻译 &#xff1a;句法分析和语义分析和中间代码生成句法制导翻译…

Pytorch深度学习框架实战教程02:开发环境部署

相关章节 《Pytorch深度学习框架实战教程09&#xff1a;模型的保存和加载》 《Pytorch深度学习框架实战教程01&#xff1a;深度学习框架简介》 本文详细介绍了PyTorch CPU/GPU双版本的完整安装流程&#xff0c;从环境准备到部署验证&#xff0c;助你快速搭建高效深度学习开发…

初试Spring AI实现聊天功能

文章目录 1. 实战概述 2. 实现步骤 2.1 申请API Key 2.2 创建Spring Boot项目 2.3 添加两个项目相关依赖 2.4 应用属性文件里配置Spring AI 2.5 修改启动类注解属性 2.6 创建第一个聊天控制器 2.7 创建聊天结果页面 2.8 测试第一个聊天控制器 2.9 创建第二个聊天控制器 2.10 创…

【图像处理基石】如何入门色彩评估?

什么是色彩评估&#xff1f; 色彩评估是对色彩的属性、表现、一致性及适用性进行科学分析和主观/客观判断的过程&#xff0c;核心是通过系统方法判断色彩是否符合预期标准&#xff08;如设计要求、行业规范、视觉效果等&#xff09;&#xff0c;广泛应用于印刷、纺织、涂料、产…

6、docker network

docker网络驱动Docker 网络驱动是 Docker 容器网络通信的核心机制&#xff0c;负责管理容器之间的连接、隔离和跨主机通信。Docker 网络驱动的作用网络隔离通过网络命名空间&#xff08;Network Namespace&#xff09;为每个容器提供独立的网络环境&#xff0c;确保容器之间的网…

Qt Quick 粒子系统详解

Qt Quick 粒子系统详解Qt Quick 粒子系统详解一、核心组件二、粒子运动数学模型三、基本粒子系统结构四、完整示例1、火焰效果2、雪花飘落效果3、烟花爆炸效果五、性能优化技巧六、实例展示Qt Quick 粒子系统详解 Qt Quick 粒子系统是用于创建动态视觉特效&#xff08;如爆炸、…

AI问答-供应链管理:各种交通运输方式货运成本分析

一、各种交通运输方式货运成本分析运输方式主要成本构成成本特点适用场景成本优势分析成本劣势分析参考费用&#xff08;示例&#xff09;里程/价格公路运输燃料费用、人工成本&#xff08;司机工资、维修工人工资等&#xff09;、维修费用、保险费用、道路通行费、折旧费、税费…

redis速记

1.什么是缓存穿透&#xff1f;怎么解决&#xff1f;答&#xff1a;缓存穿透是指用户请求的数据在缓存&#xff08;如 Redis&#xff09;和数据库&#xff08;如 MySQL&#xff09;中都不存在&#xff0c;导致每次请求都必须绕过缓存直接查询数据库&#xff0c;最终大量无效请求…

aspnetcore Mvc配置选项中的ModelMetadataDetailsProviders

在ASP.NET Core 中&#xff0c;ModelMetadataDetailsProviders 是用于配置模型元数据提供程序的核心组件&#xff0c;它决定了如何解析和提供模型属性的元数据&#xff08;如数据类型、验证规则、显示名称等&#xff09;。以下是其详细解析&#xff1a; 一、核心概念与作用 模…

分区表设计:历史数据归档与查询加速

以下为分区表设计的核心实现方案与技术要点&#xff0c;综合最新技术实践整理&#xff1a;一、分区表核心机制与价值‌物理存储与逻辑分离‌分区表通过预定义规则&#xff08;如时间戳、ID范围&#xff09;将大表物理拆分为多个子表&#xff08;分区&#xff09;&#xff0c;对…

下班倒计时

下班倒计时#include <stdio.h> #include <time.h> #include <unistd.h>void print_remaining_time(time_t now, time_t tar_time) {double diff difftime(tar_time, now);int hours (int)diff / 3600;int minutes ((int)diff % 3600) / 60;int seconds (…

Vue配置特性(ref、props、混入、插件与作用域样式)

前言Vue提供了许多高级特性来增强组件开发的能力。本文将深入解析Vue中的ref属性、props配置、混入(mixin)、插件开发以及scoped样式等核心特性&#xff0c;通过实例演示它们的用法&#xff0c;并给出最佳实践建议。一、ref属性详解1. ref基本用法ref用于给元素或子组件注册引用…