当前位置: 首页 > news >正文

Spring bean的创建过程

总纲领

  1. 解析读取配置文件
  2. 解析配置文件,并替换通配符
  3. 实例化
  4. 赋值

1.解析读取配置文件

通过BeanDefinitionReader 读取到配置信息。
BeanDefinitionReader: 定义规范,方便拓展
比如你是用xml 还是用properties 或者yaml 只要实现了BeanDefinitionReader 就可以被解析

2.获取到 beanDefinition 后 如果配置内容中有通配符怎么办?

比如:

<property name = url value ="${jdbc.url}">

${jdbc.url} 是不是要替换成连接串?这个时候就需要
BeanFactoryPostProcessor 来完成这个替换操作。

PostProcessor 分类

PostProcessor分为

name作用域
BeanFactoryPostProcessor增强/修改beanDefinition信息
BeanPostProcessor增强/修改bean信息

3.进入到BeanFactory

BeanFactory是整个容器的根接口,也是容器的入口
反射
Constructor ctor = clazz.getConstructor();
Object obj = ctor.instance();

这里用反射做如下操作:

状态具体内容补充
实例化在堆里面开辟一个空间对象的属性值都是默认值
初始化给属性设置值1.填充属性,2.执行初始化方法
完成完整对象context.getBean()

初始化过程

  1. 填充属性
  2. 设置Aware接口的属性
  3. BeanPostProcessor:before
  4. 执行init-method
  5. BeanPostProcessor:after
  6. 对象创建完成

总结

bean的创建过程用到了IOC 思想,控制反转 ,定义一个接口,不同的实现方式:比如 bean的定义可以是xml也可以是propertis也可以是ymal
都只要实现BeanDefinitionReader 接口就行了

同时bean的创建过程也用到了AOP的思想
具体体现在BeanFactoryPostProcessorBeanPostProcessor
在原有动作的前提下用代理的方式实现功能的增强

相关文章:

  • [架构之路-148]-《软考-系统分析师》- 7-企业信息化战略与实施-5-企业信息系统、电子政务
  • 机器学习笔记之策略
  • 面向对象练习题(6)
  • 基于springboot实现时间管理系统演示【附项目源码+论文说明】
  • 【致敬嵌入式攻城狮第2期活动预热征文】——蜂鸣器(内化)
  • 第8章_索引的创建与设计原则
  • 了解PL/SQL看这一篇够够了~
  • 为什么我们认为GPT是一个技术爆炸
  • 低代码打翻前端的饭碗?探秘两者藕断丝连的关系
  • Redis面试题 (2023最新版)
  • 文件转换-cad转geojson
  • 文件操作编程
  • 开发脚手架常用的JS库
  • 设备树dtb文件的格式分析
  • CNN PyTorch MNIST
  • JavaScript-如何实现克隆(clone)函数
  • Consul Config 使用Git做版本控制的实现
  • Create React App 使用
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • javascript从右向左截取指定位数字符的3种方法
  • Java-详解HashMap
  • OSS Web直传 (文件图片)
  • PhantomJS 安装
  • PHP的Ev教程三(Periodic watcher)
  • Python实现BT种子转化为磁力链接【实战】
  • Quartz初级教程
  • TCP拥塞控制
  • Twitter赢在开放,三年创造奇迹
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 给初学者:JavaScript 中数组操作注意点
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 记录:CentOS7.2配置LNMP环境记录
  • 小程序开发中的那些坑
  • 追踪解析 FutureTask 源码
  • 《码出高效》学习笔记与书中错误记录
  • 回归生活:清理微信公众号
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • #14vue3生成表单并跳转到外部地址的方式
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (8)STL算法之替换
  • (Matlab)使用竞争神经网络实现数据聚类
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (二)linux使用docker容器运行mysql
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (六)c52学习之旅-独立按键
  • (实战篇)如何缓存数据
  • (数据结构)顺序表的定义
  • (一)基于IDEA的JAVA基础12
  • (转)拼包函数及网络封包的异常处理(含代码)
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .net framework4与其client profile版本的区别
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)