BeanDefinition,顾名思义,是一个对象(Bean)在Spring中描述,其核心类图:


从类图我们详细了解BeanDefinition。
BeanDefinition接口继承自BeanMetadataElement和AttributeAccessor两个接口。
BeanMetadataElement:bean元数据,返回该bean的来源。
AttributeAccessor:Spring定义的属性访问器,对Bean的属性进行操作的API,例如设置属性、获取属性、判断是否存在该属性,返回bean所有的属性名称等。
下面重点分析一下BeanDefinition接口。
属性列表:
1)String SCOPE_SINGLETON,bean的作用范围,单例模式
2)String SCOPE_PROTOTYPE,bean的作用范围为prototype,在Spring生命周期中,会存在多个,由垃圾回收期管理其生命周期。
3)int ROLE_APPLICATION:bean的角色定义,默认,为应用程序定义。
4)int ROLE_SUPPORT:bean的角色定义,为应用程序定义的比较大的对象。
5)int ROLE_INFRASTRUCTURE:Spring内部定义的Bean对象。
核心方法详解:
1)void setBeanClassName(String beanClassName) :该Bean的class name。
2)void setScope(String scope):bean的生命周期,单例还是prototype。
3)void setLazyInit(boolean lazyInit):lazyInit,是否延迟加载,如果设置为true,在需要用到时再初始化。
4)void setDependsOn(String… dependsOn):dependsOn一般用于两个bean之间没有显示依赖,但后一个Bean需要用到前一个Bean执行初始方法后的结果。例如在< bean id=”a” dependsOn=”b”/> 时,在初始化a时首先先初始化b,在销毁b之前会先销毁a。
5)void setAutowireCandidate(boolean autowireCandidate)设置该对象是否可以被其他对象自动装配。
spring通过配置bean的autowire属性设置自动装配方式:
no:不使用自动装配,必须通过ref元素指定依赖,为autowire默认值。
byName:使用属性名自动装配,如果存在一个与指定属性名相同类型的bean则自动装配,如果有多个,则抛
出异常。
byType:根据类型自动状态,如果存在与指定属性类型相同的bean,则自动装配,如果有多个,则抛出异常。
constructor:与byType类似,不同之处在于它使用的是构造器的参数类型。
autodetect:通过bean的自省机制来决定是使用constructor还是byType来进行自动装配。如果有默认构造
器,则使用byType,否则使用constructor。
6)void setPrimary(boolean primary),如果其他对象按照类型自动装配时发现有多个符合类型的多个实现bean,如果bean的primary属性为true,则以primary为true的优先,当然如果有多个primary为true,则抛出异常。
7)void setFactoryBeanName(String factoryBeanName):设置bean的factoryBeanName。
8)void setFactoryMethodName(String factoryMethodName):设置bean工厂的方法名,Spring在实例化Bean对象时支持工厂方法设计模式,在初始化bean时不是通过bean的class发射创建 bean实例,而是根据factoryBeanName反射出工厂的实例,然后调用它的实例方法factoryMethodName来创建bean实例。
9)ConstructorArgumentValues getConstructorArgumentValues():获取bean的构造方法参数。
10)MutablePropertyValues getPropertyValues():获取实例bean的所有属性。
11)boolean isSingleton():是否是单例。
12)boolean isPrototype():是否是非单例。
13)boolean isAbstract():是否是抽象的。

本文主要是根据BeanDefinition接口了解bean的一些特性,值得引起注意的是:lazy-init、depends-on、autowire-candidate、autowire、primary、factory-bean、factory-method。
注:本文并没有尝试去罗列spring bean标签的全部属性。

Spring BeanDefinition相关推荐

  1. Spring - BeanDefinition的注册顺序 DeffredImportSelector

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

  2. Spring BeanDefinition加载

    Spring容器里通过BeanDefinition对象来表示Bean,BeanDefinition描述了Bean的配置信息.而BeanDefinitionRegistry接口提供了向容器注册,删除,获 ...

  3. Spring : BeanDefinition

    1.美图 2.概述 在Java中,一切皆对象.在JDK中使用java.lang.Class来描述类这个对象. 在Spring中,存在bean这样一个概念,那Spring又是怎么抽象bean这个概念,用 ...

  4. spring BeanDefinition接口

    一. BeanDefinition及其实现类 BeanDefinition接口 这个接口描述bean的结构,对应XML中的< bean >或者配置类中的@Bean 它继承了BeanMeta ...

  5. 第二篇 再读Spring 之 BeanDefinition解析

    第二篇 再读Spring 之 BeanDefinition解析 文章目录 第二篇 再读Spring 之 BeanDefinition解析 一.颗粒度问题 二.细说Spring中不同颗粒度对象在解析中的 ...

  6. Spring提取@Transactional事务注解的源码解析

    声明:本文是自己在学习spring注解事务处理源代码时所留下的笔记: 难免有错误,敬请读者谅解!!! 1.事务注解标签 <tx:annotation-driven /> 2.tx 命名空间 ...

  7. spring beans源码解读之--总结篇

    spring beans下面有如下源文件包: org.springframework.beans, 包含了操作java bean的接口和类. org.springframework.beans.ann ...

  8. BeanDefinition的载入和解析

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

  9. Spring WebApplicationContext

    WebApplicationContext是专门为web应用准备的,他允许从相对于web根目录的路劲中装载配置文件完成初始化工作,从WebApplicationContext中可以获得ServletC ...

最新文章

  1. 启动tomcat时,一直卡在Deploying web application directory这块的解决方案
  2. 信息系统项目管理师:论项目的质量管理
  3. SAP Spartacus里的@mixin visible-focus
  4. LeetCode 878. 第 N 个神奇数字(二分查找)
  5. 安装linux系统收费标准,LINUX操作系统安装标准规范.doc
  6. 游戏筑基之两个变量交换值与三个变量交换值的比较(C语言)
  7. ASP.NET 2.0中直接将Access数据库导入到Excel文件中
  8. BeX5平台简明部署过程
  9. shell脚本学习指南-学习(1)
  10. SEO小白学习与实践(一):seo学习缘起、目标
  11. UE4开发六:人物动画
  12. 2022年,GIS专业要不要转战IT?
  13. 潜艇空气独立推进系统的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  14. mc服务器常用指令_掌控MC服务器 我的世界服务器指令大全
  15. 乱花渐欲迷人眼:浅谈关于分布式存储的五大 “谎言”
  16. java新手知识第二周
  17. 串口通信基础(二)——传输方式(方向)、错误校验、传输速率与传输距离
  18. mysql设置语言变量_Mysql语言之数据操作语言
  19. 美颜SDK如何进行Android和iOS双端开发?
  20. UEFI 之 LoadImage探索

热门文章

  1. shutdown小程序
  2. python爬取歌曲评论_python 爬取歌曲评论的简单示例
  3. android 16进制 全透明_你有几种实现方案Android 设备唯一标识?
  4. 低代码开发平台_低代码开发平台系列:6、低代码是编程技术发展大势所趋
  5. python flask上传文件_Python-Flask-文件上传
  6. 使用post访问不到接口_Postman工具使用说明
  7. hive -e和hive -f的区别(转)
  8. java getClass()
  9. 讨厌麻烦的ora 01722无效数字
  10. MQTT-SN协议乱翻之实现要点