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?相关推荐

  1. Spring源码系列:BeanDefinition源码解析

    Bean的定义主要由BeanDefinition来描述的.作为Spring中用于包装Bean的数据结构,今天就来看看它的面纱下的真容吧. 首先就是BeanDefinition的类定义: public ...

  2. Spring - BeanDefinition的注册顺序 DeffredImportSelector

    文章目录 BeanDefinition的注册顺序 DeffredImportSelector BeanDefinition的注册顺序 首先是 @ComponentScan扫描: @Component ...

  3. Spring5源码 - 03 普通对象对应的BeanDefinition是如何存入DefaultListableBeanFactory#beanDefinitionMap 源码分析

    文章目录 Pre Spring处理bdmap 的理念 源码分析 Step1 : `this();` [初始化BeanFactory] register(componentClasses); [注册be ...

  4. Spring5源码 - 02 Bean和Java对象的区别与猜想验证BeanDefinition

    文章目录 问题 加载流程 BeanFactoryPostProcessor的执行时机 Code 问题 Spring创建的Bean 和 我们提供的Class对象 有什么关系吗? 一定是我们提供的这个对象 ...

  5. BeanDefinition的载入和解析

    概念 第二个过程是BeanDefinition的载入.这个载入过程是把用户定义好的Bean表示成IoC容器内部的数据结构,而这个容器内部的数据结构就是BeanDefinition.具体来说,这个Bea ...

  6. Spring IoC 源码系列(一)BeanDefinition 初始化与注册

    一.BeanDefinition 1.1 什么是 BeanDefinition 在一般的 Spring 项目中,主要通过 XML 的方式配置 bean,而 BeanDefinition 就是 XML ...

  7. beandefinition与beanfactory

    前面在讲到bean的生命周期时,提到了beandefinition,这个东西是用来创建bean对象的,beandefinition有很多重要属性:1.beanClass 2.scope 3.isLaz ...

  8. Spring 核心容器类BeanDefinition

    SpringIOC 容器管理了我们定义的各种Bean 对象及其相互的关系,Bean 对象在Spring 实现中是以BeanDefinition 来描述的,其继承体系如下:

  9. 如何将BeanDefinition注册到IoC容器?

    // 3. 通过 @Import 来进行导入 @Import(AnnotationBeanDefinitionDemo.Config.class) public class AnnotationBea ...

  10. BeanDefinition构建示例

    public class BeanDefinitionCreationDemo {public static void main(String[] args) {// 1.通过 BeanDefinit ...

最新文章

  1. python开发函数进阶:递归函数
  2. ubuntu spyder 不能输入中文
  3. tensorflow从入门到精通100讲(七)-TensorFlow房价预估使用Keras快速构建模型
  4. 云解析DNS能为你做什么?
  5. 503组史诗电影预告片音效合集动作破坏冲击紧张大气音效库 Hybrid Trailer
  6. ArcGIS之图斑净面积计算工具(支持二调,三调)
  7. 毕业设计管理系统Part4:教师上传课题,修改课题,删除课题
  8. 数据中心的三种布线方式(EOR/MOR/TOR)
  9. C语言删除数组中的重复元素(详细分析版)
  10. JAVA Reflect反射详解
  11. cortex-m3/m4栈回溯
  12. 第七十六篇 MIPI简单说明
  13. 【内核调度、负载均衡】【find_busiest_group】
  14. 德莱联盟(判断线段是否相交)
  15. 虎牙盈利能力得到改善,但监管风险对其收入产生负面影响
  16. 5大巨头入场瓜分3万亿市场!加密世界vs.互联网史诗战争将打响!
  17. 机器学习05|一万五字:SVM支持向量机02 【jupyter代码详解篇】
  18. 搭建个人网站 保姆级教程(一)云服务器购买以及环境部署
  19. 【2019斯坦福CS224N笔记】(5)The probability of a sentence Recurrent Neural Networks and Language Models
  20. 仿站长之家查询源码php,仿站长之家博客 织梦IT资讯博客源码 v1.0

热门文章

  1. MySQL之DML(数据操纵语言)
  2. Linux紧急救援模式(Centos7)
  3. 数字藏品赋能实体产业释放了哪些利好?
  4. 充电桩云平台-一站式运营服务平台
  5. 「EOJ」3185 双阶乘的质因数个数
  6. android 系统要求,Android SDK系统要求
  7. 15天精读掌握《高德纳:具体数学》 第4天 2019.5.30
  8. 用树莓派4B和宜家台灯玩转AR投影黑科技(神卓互联系列)
  9. 神经性皮炎有哪些种类
  10. 浅谈信息化,数字化,元宇宙,未来IT行业的机遇