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;
}
- 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 数组属性和方法
- Android中Fragment相互切换间不被回收的实现方法
- Android手机管理工具类详解
- 通过代码学Sutton强化学习第四章动态规划
- android通过okhttpClient下载网页内容的实例代码
- Android自定义键盘的实现(数字键盘和字母键盘)
- Android iconify 使用详解
- XRecyclerView实现下拉刷新、滚动到底部加载更多等功能
- 浅析Android 快速实现图片压缩与上传功能
- Android处理时间各种方法汇总
- Android TextView Marquee的应用实例详解
- Android毛玻璃背景效果简单实现代码
- ClickHouse和他的朋友们(3)MySQL Protocol和Write调用栈
- ubuntu安装多个版本的CUDA并随时切换
- 如何在Ubuntu 18.04(实体机)上配置OpenWRT的开发环境
- Android 组合控件实现布局的复用的方法