Spring源码阅读-BeanDefinition

2024-03-30 03:08

本文主要是介绍Spring源码阅读-BeanDefinition,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1概述

     在阅读Spring源码的时候,发现Spring通过加载配置文件获得文档(document)对象之后,会对文档里面的标签进行解析注册到Spring容器中,如下图所示,通过资源文件获得文档对象之后,Spring会立马进行bean标签的解析和注入。
在这里插入图片描述
      继续往下走,我们会看到,Spring对Bean标签的解析会分为默认标签解析和自定义标签解析,两者的区别,后续我会再写一篇文章说明。

2 BeanDefinition

     在Spring解析Bean标签的过程中,可以发现,会经常出现BeanDefintion这个字眼,通过查阅源码,可以知道,BeanDefinition其实是一个接口,在Spring框架中,总共有三种实现,分别是RootBeanDefinition,ChildBeanDefinitio和GenericDefinition。三者均继承AbstractBeanDefinition抽象类,BeanDefinition的三个实现及相关关系如图所示。
在这里插入图片描述

      BeanDefinition是配置文件<bean>标签在容器的内部表示形式,<bean>元素拥有class,scope,lazy-init等配置属性,BeanDefinition则提供了相应的beanClass,scope,lazyinit属性,BeanDefinition和<bean>标签总的属性是一一对应的,在BeanDefinition的三个实现中,RootBeanDefinition 是最常见的实现类,与其对应的是一般性的<bean>标签,GenericBeanDefinition 是从2.5版本以后新加入的bean文件配置属性定义类,一站式服务类。
      在配置文件中,可以定义父bean和子bean,父bean用 RootBeanDefinition表示,而子bean用哦过ChildBeanDefinition表示。其它情况一般用GenericBeanDefinition 即可。在bean标签的解析中,Spring 通过将配置文件中的bean标签的配置信息转为BeanDefinition注册到BeanDefinitionRegisty中,BeanDefinitionRegisty好比Spring配置信息的内存数据库,主要是以map形式存在。在bean解析完毕的时候,后续操作都是直接从BeanDefinitionRegisty中读取配置信息.
     本质来说,BeanDefinition是bean属性的一种承载实体。

3.BeanDefinition 的父关系

BeanDefinition 继承 AttributeAccessor 和 BeanMetadataElement 接口。
在这里插入图片描述在这里插入图片描述
AttributeAccessor接口定义了对属性的修改,包括获取、设置、删除。
BeanMetadataElement,Bean 元对象持有的配置元素可以通过 #getSource() 方法来获取。代码如下

这篇关于Spring源码阅读-BeanDefinition的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/860333

相关文章

SpringBoot结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底

解决hive启动时java.net.ConnectException:拒绝连接的问题

《解决hive启动时java.net.ConnectException:拒绝连接的问题》Hadoop集群连接被拒,需检查集群是否启动、关闭防火墙/SELinux、确认安全模式退出,若问题仍存,查看日志... 目录错误发生原因解决方式1.关闭防火墙2.关闭selinux3.启动集群4.检查集群是否正常启动5.

SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南

《SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南》本文将基于开源项目springboot-easyexcel-batch进行解析与扩展,手把手教大家如何在SpringBo... 目录项目结构概览核心依赖百万级导出实战场景核心代码效果百万级导入实战场景监听器和Service(核心

idea Maven Springboot多模块项目打包时90%的问题及解决方案

《ideaMavenSpringboot多模块项目打包时90%的问题及解决方案》:本文主要介绍ideaMavenSpringboot多模块项目打包时90%的问题及解决方案,具有很好的参考价值,... 目录1. 前言2. 问题3. 解决办法4. jar 包冲突总结1. 前言之所以写这篇文章是因为在使用Mav

Spring Security6.3.x的使用指南与注意事项

《SpringSecurity6.3.x的使用指南与注意事项》SpringSecurity6.3.1基于现代化架构,提供简洁配置、增强默认安全性和OAuth2.1/OIDC支持,采用Lambda... 目录介绍基础配置 (Servlet 应用 - 使用 Lambda DSL)关键配置详解(Lambda DS

Java Stream 的 Collectors.toMap高级应用与最佳实践

《JavaStream的Collectors.toMap高级应用与最佳实践》文章讲解JavaStreamAPI中Collectors.toMap的使用,涵盖基础语法、键冲突处理、自定义Map... 目录一、基础用法回顾二、处理键冲突三、自定义 Map 实现类型四、处理 null 值五、复杂值类型转换六、处理

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的