在spring中,万物都是bean对象,每一个对象都可以封装成BeanDefinition,然后去生成bean对象。
所以首先第一步,spring要找到哪些bean需要实例化,第一种是xml的方式,如果需要实例化bean就在xml中配置bean标签,找到所有需要创建的bean,第二种注解方式,扫描所有添加了spring注解的bean,把所有的bean封装成一个BeanDefinition放入一个list.
第二步,循环list,通过BeanDefinition中的类全名称,通过反射进行实例化,属性注入,如果还有一个初始化的动作,也可以在属性注入后做,比如:init-method方法,比如实现了InitializingBean这个接口,然后在初始化的时候自动调用afterPropertiesSet该方法,我们可以在这个里面对bean做其他的操作,如果bean需要被代理,则通过后置通知,去生成代理的bean,如果bean实现了接口就使用jdk代理,如果没有实现就使用cglib,如果配置的优先级,则优先使用cglib.
第三步,完成后就将bean放入到spring的一级容器中。

Bean是如何创建的?相关推荐

  1. 不一样 使用别名 数据字段和bean_【修炼内功】[spring-framework] [3] Bean是如何创建又是如何销毁的?...

    书接上文,在 [spring-framework] [2] BeanDefinitionReader 一文中简单介绍了XMLBeanFactory解析xml配置.并注册BeanDefinition的逻 ...

  2. Spring源码阅读之bean对象的创建过程

    Spring源码阅读之bean对象的创建过程 ​ Spring是通过IOC容器来管理对象的,该容器不仅仅只是帮我们创建了对象那么简单,它负责了对象的整个生命周期-创建.装配.销毁.这种方式成为控制反转 ...

  3. Spring bean 的5个作用域 Spring Bean的默认作用域为:singleton。它相比其他作用域的优点是系统开销小,Bean实例一旦创建成功便可重复使用。 1.singleton作用域

    Spring bean 的5个作用域 Spring Bean的默认作用域为:singleton.它相比其他作用域的优点是系统开销小,Bean实例一旦创建成功便可重复使用. 1.singleton作用域 ...

  4. php javabean对象,Struts2 bean标签:创建并示例化一个JavaBean对象

    bean 标签也是一个十分常用的标签,它与 JSP 中的 动作类似,主要用于创建并示例化一个 JavaBean 对象,对于 JavaBean 中的属性可以通过 param 标签对其赋值. 语法: // ...

  5. Spring bean三种创建方式

    spring共提供了三种实例化bean的方式:构造器实例化(全类名,反射).工厂方法(静态工厂实例化   动态工厂实例化)和FactoryBean ,下面一一详解: 1.构造器实例化 City.jav ...

  6. Spring框架----Spring的bean之三种创建bean对象的方式

    第一种方式:使用默认构造函数创建 在spring中的配置文件中,使用bean标签,配以id和class属性之后,且没有其他标签时,采用的就是默认构造函数创建bean对象, 此时类中没有默认构造函数,则 ...

  7. Spring的bean的注创建、依赖注入、自动装配

    一.bean 定义:被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的.bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象. bean作用 ...

  8. Spring IOC 容器源码分析 - 创建单例 bean 的过程

    1. 简介 在上一篇文章中,我比较详细的分析了获取 bean 的方法,也就是getBean(String)的实现逻辑.对于已实例化好的单例 bean,getBean(String) 方法并不会再一次去 ...

  9. Spring BPP中优雅的创建动态代理Bean

    Spring BPP中优雅的创建动态代理Bean 一.前言 本文章所讲并没有基于Aspectj,而是直接通过Cglib以及ProxyFactoryBean去创建代理Bean.通过下面的例子,可以看出C ...

最新文章

  1. CVPR2020 论文解读:少点目标检测
  2. R语言绘制二维密度图
  3. LVM管理-元数据及分区表的恢复
  4. mysql中find_in_set_mysql中find_in_set()函数的使用详解
  5. 练习4.4、4.5、4.6、4.7
  6. 【IdentityServer4文档】- 欢迎来到 IdentityServer4
  7. 第5章 Python 数字图像处理(DIP) - 图像复原与重建4 - 指数噪声
  8. JS中元素的属性(class、style)操作
  9. zabbix详解(二)——zabbix工作原理
  10. java swing结束事件_java swing清除事件队列
  11. 【视频】CCNA——小凡模拟器的简单介绍和使用
  12. bp神经网络java代码_BP神经网络的Java实现
  13. SMPP协议,CMPP协议是啥子
  14. 用python爬取堆糖图片-小白级
  15. 易到用车构架演进及上云探索
  16. 网站内部优化-怎么做好网站内部SEO优化-网站内部SEO优化方案
  17. 著名设计师的标志(Logo)设计观 1
  18. STRATASYS 即将收购 ORIGIN,将全新增材制造平台引入聚合物生产领域
  19. hyperledger Fabric安装
  20. LeetCode 第 58 场力扣夜喵双周赛(动态规划、马拉车算法,前后缀处理)/ 第 253 场力扣周赛(贪心,LIS)

热门文章

  1. SpringMVC整合mybatis(终结版)
  2. 报错解决 | 重装VS2017报错140.Tools.HostX64.TargetARM.Msi.Reso
  3. 小米的抢购骗局+小米的抢购页面的源代码分析(二)文本数组的分析
  4. 解决VMware的虚拟网络编辑器中没有VMnet0的情况
  5. MSP-EXP430F5529LP_GPIO
  6. 江苏省专精特新小巨人企业奖励政策及申报条件重点介绍,补贴50万
  7. 犀牛中斑马纹分析的作用
  8. EPLAN 接线端子
  9. Linux 监控文件变化
  10. 介绍四种绘制词云图的方法