Spring之【BeanDefinition】

目錄

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用于給元素或子組件注冊引用…