什么是 BeanDefinition?
BeanDefinition 是定义 Bean 的配置元信息接口,包含:
- Bean 的类名
- 设置父 bean 名称、是否为 primary、
- Bean 行为配置信息,作用域、自动绑定模式、生命周期回调、延迟加载、初始方法、销毁方法等
- Bean 之间的依赖设置,dependencies
- 构造参数、属性设置
...
BeanDefinition 子类方法更为丰富些。
派生出 AnnotatedBeanDefinition 接口,以及常用子类 RootBeanDefinition、GenericBeanDefinition。
可以使用 BeanDefinitionBuilder 或 new BeanDefinition 实现类构建 BeanDefinition 对象。
代码:
User.java
package constxiong;public class User {private Integer id;private String name;public User() {}public User(Integer id, String name) {this.id = id;this.name = name;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + "]";}}
构建和注册 BeanDefinition 对象测试类
package constxiong;import org.springframework.beans.factory.config.ConstructorArgumentValues;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.RootBeanDefinition;/*** 测试 BeanDefinition 构建* @author ConstXiong*/
public class Test {public static void main(String[] args) {DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();// BeanDefinitionBuilder 构建 BeanDefinitionBeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(User.class).addPropertyValue("id", 1) //属性设置.addPropertyValue("name", "constxiong");beanFactory.registerBeanDefinition("user1", builder.getBeanDefinition());User user = beanFactory.getBean("user1", User.class);System.out.println(user);//直接 new 的方式,创建 BeanDefinitionBuilder 对象RootBeanDefinition beanDefinition = new RootBeanDefinition(User.class);//构造参数ConstructorArgumentValues constructorArgumentValues = new ConstructorArgumentValues();constructorArgumentValues.addIndexedArgumentValue(0, 1);constructorArgumentValues.addIndexedArgumentValue(1, "user2");beanDefinition.setConstructorArgumentValues(constructorArgumentValues);beanFactory.registerBeanDefinition("user2", beanDefinition);User user2 = beanFactory.getBean("user2", User.class);System.out.println(user2);}}
完整代码:005-spring-beandefinition
【Java学习资源】整理推荐
- Bean 的作用域
- maven 集成 tomcat 以 jar 的方式打包 web 应用
- Spring 依赖注入与依赖查找来源的区别
- Spring 依赖注入的处理过程与 DependencyDescriptor 的说明
- Spring 各种 Aware 接口回调注入
- Spring Bean 生命周期内的 Exception 复现
- Spring 内建 Bean
- Spring Bean 的别名
- Spring Bean 未指定名称的命名规则
- Bean 何时被 GC
- Spring Bean 延迟加载
- ObjectFactory 与 BeanFactory 的区别
- Bean 销毁的方式与顺序
- Bean 初始化的方式与顺序
- Bean 的实例化方式
- Bean的注册方式
- 什么是 BeanDefinition?
- Spring IoC 容器启动时做了什么?
- BeanFactory 与 FactoryBean 的区别
- BeanFactory 与 ApplicationContext 的区别
- Spring IoC 依赖注入的实现方式
- Spring IoC 依赖注入(支持哪些数据类型?)
- Spring bean 依赖查找
- Spring-IoC
- Spring 的核心特性
【Java面试题与答案】整理推荐
- 基础与语法
- 集合
- 网络编程
- 并发编程
- Web
- 安全
- 设计模式
- 框架
- 算法与数据结构
- 异常
- 文件解析与生成
- Linux
- MySQL
- Oracle
- Redis
- Dubbo
什么是 BeanDefinition?相关推荐
- Spring源码系列:BeanDefinition源码解析
Bean的定义主要由BeanDefinition来描述的.作为Spring中用于包装Bean的数据结构,今天就来看看它的面纱下的真容吧. 首先就是BeanDefinition的类定义: public ...
- Spring - BeanDefinition的注册顺序 DeffredImportSelector
文章目录 BeanDefinition的注册顺序 DeffredImportSelector BeanDefinition的注册顺序 首先是 @ComponentScan扫描: @Component ...
- Spring5源码 - 03 普通对象对应的BeanDefinition是如何存入DefaultListableBeanFactory#beanDefinitionMap 源码分析
文章目录 Pre Spring处理bdmap 的理念 源码分析 Step1 : `this();` [初始化BeanFactory] register(componentClasses); [注册be ...
- Spring5源码 - 02 Bean和Java对象的区别与猜想验证BeanDefinition
文章目录 问题 加载流程 BeanFactoryPostProcessor的执行时机 Code 问题 Spring创建的Bean 和 我们提供的Class对象 有什么关系吗? 一定是我们提供的这个对象 ...
- BeanDefinition的载入和解析
概念 第二个过程是BeanDefinition的载入.这个载入过程是把用户定义好的Bean表示成IoC容器内部的数据结构,而这个容器内部的数据结构就是BeanDefinition.具体来说,这个Bea ...
- Spring IoC 源码系列(一)BeanDefinition 初始化与注册
一.BeanDefinition 1.1 什么是 BeanDefinition 在一般的 Spring 项目中,主要通过 XML 的方式配置 bean,而 BeanDefinition 就是 XML ...
- beandefinition与beanfactory
前面在讲到bean的生命周期时,提到了beandefinition,这个东西是用来创建bean对象的,beandefinition有很多重要属性:1.beanClass 2.scope 3.isLaz ...
- Spring 核心容器类BeanDefinition
SpringIOC 容器管理了我们定义的各种Bean 对象及其相互的关系,Bean 对象在Spring 实现中是以BeanDefinition 来描述的,其继承体系如下:
- 如何将BeanDefinition注册到IoC容器?
// 3. 通过 @Import 来进行导入 @Import(AnnotationBeanDefinitionDemo.Config.class) public class AnnotationBea ...
- BeanDefinition构建示例
public class BeanDefinitionCreationDemo {public static void main(String[] args) {// 1.通过 BeanDefinit ...
最新文章
- python开发函数进阶:递归函数
- ubuntu spyder 不能输入中文
- tensorflow从入门到精通100讲(七)-TensorFlow房价预估使用Keras快速构建模型
- 云解析DNS能为你做什么?
- 503组史诗电影预告片音效合集动作破坏冲击紧张大气音效库 Hybrid Trailer
- ArcGIS之图斑净面积计算工具(支持二调,三调)
- 毕业设计管理系统Part4:教师上传课题,修改课题,删除课题
- 数据中心的三种布线方式(EOR/MOR/TOR)
- C语言删除数组中的重复元素(详细分析版)
- JAVA Reflect反射详解
- cortex-m3/m4栈回溯
- 第七十六篇 MIPI简单说明
- 【内核调度、负载均衡】【find_busiest_group】
- 德莱联盟(判断线段是否相交)
- 虎牙盈利能力得到改善,但监管风险对其收入产生负面影响
- 5大巨头入场瓜分3万亿市场!加密世界vs.互联网史诗战争将打响!
- 机器学习05|一万五字:SVM支持向量机02 【jupyter代码详解篇】
- 搭建个人网站 保姆级教程(一)云服务器购买以及环境部署
- 【2019斯坦福CS224N笔记】(5)The probability of a sentence Recurrent Neural Networks and Language Models
- 仿站长之家查询源码php,仿站长之家博客 织梦IT资讯博客源码 v1.0