一、什么是BeanDefinition

BeanDefinition表示Bean定义,Spring根据BeanDefinition来创建Bean对象,BeanDefinition有很多属性来描述Bean。

1、BeanDefinition中的重要属性

a. beanClass

表示一个bean的类型,XXX.class,spring在创建Bean的过程中会根据此属性来实例化得到对象

b. scope

表示一个bean的作用域:
scope=singleton,该bean就是一个单例bean
scope=prototype,该bean就是一个原型bean,每次获得bean都会生成一个新的对象

c. isLazy

表示一个bean是不是需要懒加载,注:原型bean的isLazy属性不起作用。
懒加载的单例bean会在第一次getBean的时候生成bean,非懒加载的的单例bean会在spring启动过程中生成bean

d. dependsOn

表示一个bean在创建前所依赖的其他bean,在一个bean创建前,它所依赖的的bean得先全部创建好

e. primary

表示一个bean是主bean,在spring中一个类型可以有多个bean对象,在进行依赖注入时,如果根据类型找到了多个bean,则会判断这些bean中是否会存在一个主bean,如果存在,则直接将这个bean注入给属性

f. initMethodName

表示一个bean的初始化方法,一个bean的生命周期中有一个步骤叫做初始化,spring会在这个步骤中去调用bean的初始化方法,初始化的逻辑由程序要自己控制,表示程序员可以自定义逻辑对bean进行加工

二、什么是 BeanFactory

BeanFactory是一种“spring容器”它可以用来创建Bean、获取Bean。
BeanFactory将利用BeanDefinition生成Bean对象

BeanFactory的核心子类接口和实现类

ListableBeanFactory ConfigurableBeanFactory AutowireCapableBeanFactory AbstractBeanFactory DefaultListableBeanFactory
DefaultListableBeanFactory的功能:
支持单例Bean,Bean别名、父子BeanFactory、Bean类型转换、Bean后置处理、自动装配等等

三、Bean的生命周期

  1. BeanDefinition: BeanDefinition表示Bean定义、它定义了某个Bean类型、比如需要利用BeanDefinition中beanClass的属性确定Bean类型,从而实例化对象
  2. 构造方法推断:一个Bean中可以有多个构造方法,此时需要spring来判断用那个构造方法,之后确定一个构造方法,就可以利用构造方法来实例化得到一个对象了
  3. 实例化 (构造方法反射得到对象):通过构造方法反射得到一个实例化对象,在spring中可以通过BeanPostProcessor机制对实例化进行干预
  4. 属性填充(给输出进行自动填充):实例化得到的对象不是完整的对象、不完整的意思是该对象中的属性还没有进行填充,也就是spring还没有自动给某些属性赋值,属性填充就是通常说的依赖注入、自动注入
  5. 初始化(对其他属性校验、赋值):可以利用初始化机制对Bean进行自定义加工,比如利用InitializingBean接口对Bbean中的其他属性进行赋值、或对Bean中的某些属性进行校验
  6. 初始化后(AOP、生成代理对象):AOP机制就是在这个步骤中通过BeanPostProcessor自己实现的,初始化之后得到的对象才是真正的Bean对象

BeanDefinition BeanFactory Bean的关系相关推荐

  1. SpringBoot:class变成beanDefinition, beanDefinition变成bean

    SpringBoot:class变成beanDefinition, beanDefinition变成bean 跟进AbstractApplicationContext的refresh方法: publi ...

  2. BeanDefinition到Bean

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

  3. Spring源码 IOC和循环依赖AOP

    Spring源码 IOC和循环依赖AOP IOC篇 1.BeanFactory IOC容器,以BeanFactory为载体. BeanFactory,是Spring容器.这是由Spring管理,产生S ...

  4. Spring源码解析之 Bean与BeanDefinition详解

    文章目录 Spring解决的核心问题 Bean与BeanDefinition 代码验证BeanDefinition 代码运行测试 Spring容器主要流程 与BeanDefinition相关的类 At ...

  5. bean的后处理器和beanfactory的后处理器、Aware和InitializingBean、初始化和销毁

    目录 Bean的后处理器 AutowiredAnnotationBeanPostProcessor运行分析 BeanFactory的后置处理器 @ComponentScan @Bean @Compon ...

  6. Spring IOC学习心得之注册bean的依赖关系

    registerDependentBean方法的解析(注册bean的依赖关系) 源码如下: public void registerDependentBean(String beanName, Str ...

  7. 4、IOC 之Bean的依赖关系

    4.IOC 之Bean的依赖关系 4.1.依赖注入(DI) 依赖关系注入 (DI) 是一个过程,其中对象仅通过构造函数参数.工厂方法的参数或在对象实例构造或从工厂方法返回后在对象实例上设置的属性来定义 ...

  8. Spring解析,加载及实例化Bean的顺序(零配置)

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 作者:jb_hz blog.csdn.net/qq_2752 ...

  9. IoC-spring 的灵魂(带你轻松理解IOC思想及bean对象的生成过程)

    在理解任何技术之前,我都会问自己一个问题:它的产生是为了解决什么样的问题,以及如何解决这些问题?希望你能在本篇文章中找到答案-- (由于大家对Ioc应该是经常使用了,所以这里不会告诉你应该怎么样使用, ...

最新文章

  1. Linux之tcpdump
  2. CMDB 设计(二)实现host、ip存储
  3. centos 7 网络设置与图像化界面下载
  4. java大作业斗地主游戏_Java集合练习:斗地主游戏
  5. Python笔记:0
  6. 开源软件 Cachet 被曝RCE漏洞
  7. Atitit SpringCache缓存使用 艾提拉 attilax总结 1. Spring的抽象已经做得够好了,适合于大多数场景,非常复杂的就需要自己AOP实现了。 1 1.1. 设置配置文件支持
  8. 引文工具的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  9. 漏洞分析C#反编译软件Reflector 11.1.0.2167(最新版)(附补丁下载)
  10. 航信三大系统ICS DCS CRS
  11. 链家上海2018年9月二手房
  12. CSS基础--属性设置
  13. 轻轻松松实现角度转换(弧度度分秒)
  14. c语言判断字符串str1中含有字符串str2(是否为子串问题)
  15. react中使用微信jssdk分享总结
  16. 备忘_命令行查看电池损耗
  17. 抖音矩阵系统。抖音矩阵系统,抖音矩阵系统源码。
  18. Kali Linux 触摸板支持单击
  19. 突发!又一风云人物,被警方采取刑事强制措施
  20. JAVA开发人员必备的免费JSP空间

热门文章

  1. Reso | php面试题(基础概念)
  2. matlab命令批量重命名,MATLAB中预定义对话框之文件打开对话框以及如何批量重命名...
  3. 链安团队漏洞分析连载(第一期)一一溢出漏洞
  4. Python学习笔记六——画小猪佩奇
  5. java 从已知日期计算干支纪日_天干地支纪日纪时计算公式
  6. Chrome 浏览器
  7. Smt贴片加工出现元件立碑的解决方法
  8. 手机投屏不是全屏怎么办_手机投屏不满屏怎么办
  9. TypeScript泛型工具
  10. 不靠谱的预测:今年双十一的销量是 6213 亿元