BeanDefinition是什么?

/*** A BeanDefinition describes a bean instance, which has property values,* constructor argument values, and further information supplied by* concrete implementations.** <p>This is just a minimal interface: The main intention is to allow a* {@link BeanFactoryPostProcessor} such as {@link PropertyPlaceholderConfigurer}* to introspect and modify property values and other bean metadata.** @author Juergen Hoeller* @author Rob Harrop* @since 19.03.2004* @see ConfigurableListableBeanFactory#getBeanDefinition* @see org.springframework.beans.factory.support.RootBeanDefinition* @see org.springframework.beans.factory.support.ChildBeanDefinition*/
public interface BeanDefinition extends AttributeAccessor, BeanMetadataElement

BeanDefinition在Spring中是用来描述Bean对象的,其不是一个bean实例,仅仅是包含bean实例的所有信息,比如属性值、构造器参数以及其他信息。Bean对象创建是根据BeanDefinitionc中描述的信息来创建的,BeanDefinitionc存在的作用是为了可以方便的进行修改属性值和其他元信息,比如通过BeanFactoryPostProcessor进行修改一些信息,然后在创建Bean对象的时候就可以结合原始信息和修改后的信息创建对象了。

BeanDefinition包含哪些信息?

分类 属性 or 方法 说明 备注
Bean对象含义
@Nullable
String getFactoryMethodName();

Bean对象的class对象

必填
ConstructorArgumentValues getConstructorArgumentValues()
构造器参数  
MutablePropertyValues getPropertyValues();
属性值  
@Nullable
String getFactoryBeanName();
工厂bean名称  
boolean isAbstract();
是否是abstract修饰  
Spring对象的含义
@Nullable
String getDescription();
beanDefinition描述  
 
@Nullable
String[] getDependsOn();
依赖的bean名称 if any
 
@Nullable
String getFactoryMethodName();
获取工厂方法 if any
 
@Nullable
BeanDefinition getOriginatingBeanDefinition();
获取装饰的原始beanDefinition if any
 
@Nullable
String getParentName();
获取父BeanDefinition的名称 if any
 
@Nullable
String getResourceDescription();
获取beanDefinition的资源说明,主要用来错误信息提示  
 
int getRole();
角色

ROLE_APPLICATION
ROLE_SUPPORT
ROLE_INFRASTRUCTURE
 
 
@Nullable
String getScope();

Bean的Score名称,也可以扩展

SCOPE_SINGLETON
SCOPE_PROTOTYPE
 
 
boolean isAutowireCandidate();
是否是其他bean的autowire的候选人  
 
boolean isLazyInit();
是否懒加载  
 
boolean isPrimary();
是否是主要的候选对象,类有多个实现类的时候,注入没有其他配置的时候会选择primary的候选这注入  
生命周期方法
@Nullable
String getInitMethodName();
初始化方法  
@Nullable
String getDestroyMethodName();
销毁方法  

BeanDefinition介绍相关推荐

  1. Spring 学习之扩展点总结之后置处理器(一)

    Spring 源码系列 1.Spring 学习之扩展点总结之后置处理器(一) 2.Spring 学习之扩展点总结之后置处理器(二) 3.Spring 学习之扩展点总结之自定义事件(三) 4.Sprin ...

  2. 【框架源码】Spring源码底层IOC容器加入对象的方式

    1.Spring容器加入对象方式简介 使用XML配置文件 在XML配置文件中使用< bean >标签来定义Bean,通过ClassPathXmlApplicationContext等容器来 ...

  3. JDK、Spring、Dubbo SPI 原理介绍

    导读: 需求变化是程序员生命中唯一不变的事情,本文将介绍 JDK/Spring/Dubbo 中的 SPI 机制,以此来帮助我们编写出一套可扩展性强,易于维护的代码框架. 文|杨亮 网易云商高级 Jav ...

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

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

  5. BeanDefinition到Bean

    当 BeanDefinition 注册完毕以后, Spring Bean 工厂就可以随时根据需要进行实例化了.对于 XmlBeanFactory 来说,实例化默认是延迟进行的,也就是说在 getBea ...

  6. spring源码系列一--BeanDefinition

    如果说java是由对象组成,那么spring-framework框架可以说是由BeanDefinition所构成.BeanDefinitiion其实是spring中的顶级接口,我们在阅读源码之前必须要 ...

  7. SpringBoot:Bean生命周期介绍

    SpringBoot:Bean生命周期介绍 前言 一.Bean 的生命周期介绍 二.具体操作顺序 前言 Bean 是 SpringBoot 中一个非常重要的组成部分,是面试中经常会问到的一个问题. 本 ...

  8. Spring官网阅读(四)BeanDefinition(上)

    前面几篇文章已经学习了官网中的1.2,1.3,1.4三小结,主要是容器,Bean的实例化及Bean之间的依赖关系等.这篇文章,我们继续官网的学习,主要是BeanDefinition的相关知识,这是Sp ...

  9. Spring中Bean的生命周期以及三级缓存介绍

    Bean的生命周期以及三级缓存介绍 简述 测试代码编写 创建IOC容器(Bean创建) 1.refresh()方法 2.finishBeanFactoryInitialization(beanFact ...

最新文章

  1. Strategy_Level2
  2. mysql为什么用索引_MySql为什么使用B+树做索引
  3. Java基于FTPClient上传文件到FTP服务器
  4. android应用兼容报告,手机资讯导报:华为发布国内首份Android7.0应用兼容报告
  5. python的数据类型和变量的定义及使用
  6. STL源码剖析---STL容器特征总结(含迭代器失效)
  7. 零基础学习爬虫并实战
  8. .net调用c++方法时如何释放c++中分配的内存_C/C++编程笔记:C语言编程知识要点总结!大一C语言知识点(全)...
  9. neo4j导入两个文件_Neo4j:找到两个纬度/经度之间的中点
  10. 分解质因数-洛谷P3200 [HNOI2009]有趣的数列
  11. Spark-大规模数据处理计算引擎
  12. php .net mvc,总是觉得asp.net MVC 写着很别扭,对比PHP的mvc,asp.net 麻烦很多?
  13. 【转载】10个有用的du命令行
  14. linux recv 返回值与linux socket 错误分析
  15. Odoo(OpenErp) 收藏夹(私藏)
  16. 《凤凰项目》读书笔记二
  17. 解决VMware虚拟机桥接模式无法上网
  18. wireshark绿色便携版 v3.4.2.0
  19. 程序员该如何释放压力
  20. “造星工厂“乐华娱乐IPO,如何寻找下一个“王一博“?

热门文章

  1. DC-2靶机(新手村)
  2. 30.set-UID set-gid stic_bit
  3. unity3d terrian tree 地形组件 草木石树无法碰撞的解决办法
  4. radius认证服务
  5. 2023-Python实现巨潮资讯网数据采集
  6. 《微信公众平台开发最佳实践》——导读
  7. MyBatis第十一章:项目案例——update配置及set动态语句操作
  8. 2019年中国森林冠层高度(树高)数据30m分辨率(附数据下载链接)
  9. 【从零开始学Skynet】基础篇(二):了解Skynet
  10. springBoot学习2--整合篇--基于狂神说