BeanDefinition元信息:除了Bean名称和类名,还有哪些Bean元信息值得关注?
时间:2022-07-28
本文章向大家介绍BeanDefinition元信息:除了Bean名称和类名,还有哪些Bean元信息值得关注?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Spring 上一篇文章中已介绍了Bean 的定义,什么是BeanDefinition?下面主要源码结合模式分析BeanDefinition元信息「Bean的配置元信息」
下面罗列了BeanDefinition元信息配置
上面一表格形式概括说明BeanDefinition元信息配置,不是所有的属性配置都是必须的,但是前面几个参数属性是必须的
附加补充说明
- Bean 的作用域 (比如:我们常用的singleton、prototype、request等)作用域类型如下图所示,后续会针对Scope做详细讲解
- Bean 的自定绑定模式 (比如:byName、byType、constructor等)自动绑定模式、这种方式属性和外面引用自动关联和配置
- Bean 的延迟初始化的模式,默认情况下是非延迟的,就是Bean在容器启动过程中会实时进行初始化,此时相对应的属性或则配置会进行一定的设置;相反延迟化的,是按需进行初始化,这种方式可以有效减少启动时间,需要的时候对Bean进行初始化
- Bean 的初始化 & 销毁,通常都是成对出现
如何构建BeanDefinition?
- 通过 BeanDefinitionBuilder 构建
- 通过 AbstractBeanDefinition 以及派生类
注意细节⚠️
BeanDefinitionBuilder提供了两种方式获取BeanDefinitionBuilder
// 普通方式获取,非根的Bean,可以有父类
BeanDefinitionBuilder#genericBeanDefinition
// 根节点获取,只能获取根节点Bean即最顶层Bean
BeanDefinitionBuilder#rootBeanDefinition
实例
public class BeanDefinitionCreationDemo {
public static void main(String[] args) {
// 1.通过BeanDefinitionBuilder 构建
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(User.class);
// 通过属性配置
beanDefinitionBuilder.addPropertyValue("id", 1);
beanDefinitionBuilder.addPropertyValue("name", "小码哥");
// 获取BeanDefinition 实例
BeanDefinition beanDefinition = beanDefinitionBuilder.getBeanDefinition();
// BeanDefinition 并非 Bean 终态,可以自定义修改
// 2. 通过 AbstractBeanDefinition 以及派生类
GenericBeanDefinition genericBeanDefinition = new GenericBeanDefinition();
// 设置Bean 类型
genericBeanDefinition.setBeanClass(User.class);
// 通过MutablePropertyValues 批量操作属性
MutablePropertyValues propertyValues = new MutablePropertyValues();
propertyValues
.add("id", 1)
.add("name","小码哥");
// 通过 set MutablePropertyValues 批量操作属性
genericBeanDefinition.setPropertyValues(propertyValues);
}
}
BeanDefinitionBuilder#addPropertyValue
/**
* Add the supplied property value under the given property name.
*/
public BeanDefinitionBuilder addPropertyValue(String name, @Nullable Object value) {
this.beanDefinition.getPropertyValues().add(name, value);
return this;
}
- 从static变量导出问题解析 __declspec(dllexport) 和 __declspec(dllimport)的作用
- php实现SESSION跨域
- 使用cJSON解析JSON字符串
- 逻辑回归 | TensorFlow深度学习笔记
- MakeSureDirectoryPathExists与CreateDirectory的区别
- 粗略的物体碰撞预测及检测
- 讨厌算法的程序员 1 | 插入排序
- FFmpeg菜鸡互啄#第6篇#音频帧格式转换(重采样)
- TF.Learn 手写文字识别
- PHP中的防御性编程
- Ray-AABB交叉检测算法
- javascript里的sleep()方法
- 编程求取直线一般式表达式,两直线交点
- PHP版的jQuery
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用SAP CDS view快速创建一个Fiori应用,管理Service Order
- SAP Fiori Elements里Drop down list的实现原理
- SAP CRM销售订单UI上的字段对应的数据库表存储字段:requested start date和end date
- SAP CDS view自学教程之八:SAP Fiori Elements里不同类型的annotation
- SAP CDS view自学教程之五:如何开发支持Odata navigation的CDS view
- SAP Fiori Elements如何基于domain fixed value创建下拉菜单
- SAP WebClient UI配置决定(configuration)的逻辑介绍
- 潘石屹用Python解决100个问题 | 阶乘之和
- 潘石屹用Python解决100个问题 | 斐波那契数列分数
- Leetcode No.7 整数反转
- 后端程序员必备的 Linux 基础知识+常见命令(近万字总结)
- XSS Game分析以及知识点总结
- Web 图形可视化 SQL 优化神奇,真香!
- C++ vector 容器浅析
- C++中的STL中map用法详解