spring ioc流程

2023-11-17

spring 大体流程

spring的核心是ioc 所有的操作都是基于ioc来完成的 ioc是一个容器 为了解决类跟类之间的耦合问题 就是说 有一个A类 有一个B类

   public class A{
      B b = new B();
   } 

   public class B{
      A a = new A();
   }

上面的代码 我们自己手动new的对象 这样耦合度就会很高 比如 后期想把A类里面的B b = new B() 改成C c = new C() 这样就会改跟多的地方 如果使用接口开发模式 会解决上面的问题 但是我们还是需要手动的更改实现类还是有耦合问题 ioc就为了解决这个问题 我们现在是手动的new对象 而ioc的思想是 把对象放到一个集合中 当我们需要这个对象时 从集合中拿 这样我们只需要更改集合中的实现类即可 代码一点都不需要改 spring就实现了这个东西

使用spring时只需要写bean spring就会把bean放到集合中 用的时候根据名字(默认类名)就可以得到实例 不需要我们手动new 它的大体流程

spring有javaConfig跟xml方式

ClassPathXmlApplicationContext xml方式

AnnotationConfigApplicationContext(读音 昂脑tei神 抗飞个 a破落kei神 抗太死特) javaConfig

以javaConfig方法写

在main方法中我们只需要创建一个AnnotationConfigApplicationContext这个对象 给它传一个配置类 它就可以自己找标记为Bean的类 然后放到ioc中 有三个步骤 首先是读取配置类 比如要扫描哪个包下的类 然后是扫描标记为bean的类 然后把类注册成一个bean定义(就是把类封装成BeanDefinition类型bean定义是它的中文意思 读音 宾的飞内神)让后放到一个map集合中 在中期间会调用两个后置处理器类 就是可以让我干扰注册bean定义的类

关键的类

BeanDefinitionReader (读音 宾 的飞内神 瑞的 中文意思 bean定义读取) 读取配置类

BeanDefinitionSacnner(读音 宾 的飞内神 斯敢那 中文意思 bean定义扫描) 扫描

BeanDefinitionRegistry(读音 宾 的飞内神 ruai着4️ 追 中文意思 bean定义注册) 注册成 BeanDefinition类型(bean定义是它的中文意思 读音 宾 的飞内神)

后置处理器

BeanFactoryPostProcessor(读音 宾 抗飞个 跑四特 破色c 中文意思 PostProcessor后处理器 也就是bean工厂的后处理器) 实现它的方法 它会给返回一个BeanFactory 然后使用BeanFactory的注册BeanDefinition方法api修改bean 所以它修改bean定义的 修改就是在原有的bean定义基础上修改成别的类型

BeanDefinitionRegistryPostProcessor(读音 宾 的飞内神 中文意思bean定义注册的后处理器) 从中文意思就可以看出 是用来添加bean定义的

bean创建完 接下来 BeanFactory就会扫描存放bean定义的集合 把bean一个一个的拿出来进行实例化 在bean定义的类中有属性存放类的class 后面写源码会写出来

然后就是bean的生命周期

实例化 --》填充属性 --》初始化 --》放到一级缓存

实例化就是通过反射创建对象 执行实例化的后处理器

填充属性就是 把加了@Value或@Autowired注解的属性赋值 解决循环依赖 执行填充属性的后处理器

初始化就是调用initMethod destroy 还有一大堆的Aware中的方法 还有aop的实现 在这里实现aop可以跟bean的生命周期解耦 执行初始化的后处理器

ioc的过程用人话就是

你去洗浴中心洗澡 首先会有前台 也就是AnnotationConfigApplicationContext 接应你 你告诉它要什么什么服务 比如要特殊服务 然后它通知服务员 服务员通知小姐姐 去找你然后被服务上了 也就是AnnotationConfigApplicationContext通知BeanFactory创建什么那些bean 然后你调用getBean的时候给你bean

BeanFactory跟ApplicationContext它们两个都可以创建bean 而ApplicationContext会给我们实现一些额外的功能

BeanFactory就相当于正规的洗浴中心 就是洗澡按摩 在spring中BeanFactory就只能创建bean获取bean 其它的都不能做 如果在内存比较小的机器上可以使用BeanFactory进行开发

ApplicationContext就是一个不正规的洗浴中心 不但能洗澡按摩 还有特殊服务 比如提供小日本拍的技术教学电影中的内容 在Spring中ApplicationContext给我提供的自动扫描、自动把标记为bean的java类封装成bean定义等

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring ioc流程 的相关文章

随机推荐

  • AD采集中的10种经典软件滤波程序优缺点分析(附程序)

    在AD采集中经常要用到数字滤波 而不同情况下又有不同的滤波需求 下面是10种经典的软件滤波方法的程序和优缺点分析 1 限幅滤波法 又称程序判断滤波法 2 中位值滤波法 3 算术平均滤波法 4 递推平均滤波法 又称滑动平均滤波法 5 中位值平
  • 自定义协议:如何实现keepalive

    高可用协议招式 keepalive 什么是keepalive tcp如何实现keepalive http如何实现keepalive 自定义协议时该怎样实现keepalive 什么是keepalive Keepalive是一种技术 它可以帮助
  • C语言最简单的服务器和客户端程序

    服务器 include
  • SQLServer之DEFAULT约束

    DEFAULT约束添加规则 1 若在表中定义了默认值约束 用户在插入新的数据行时 如果该行没有指定数据 那么系统将默认值赋给该列 如果我们不设置默认值 系统默认为NULL 2 如果 默认值 字段中的项替换绑定的默认值 以不带圆括号的形式显示
  • shell面试题

    第1章 选择 1 1 退出交互模式的 shell 应键入 A B q C exit D quit 1 2 下列变量名中有效的 shell 变量名是 C 2 time 2 3 trust no 1 2004file 1 3 在 shell 编
  • stm32低功耗解决方案-(外部时钟芯片RX8025T)

    首先在入手一个芯片时要先观看芯片手册rx8025t和rx8025as手册是不一样 两者的寄存器也会有很大的差距 RX8025t中文手册 本文介绍的是一个低功耗解决方案 因为我使用的是stm32的待机模式 所以只需要在唤醒时想办法就行了 因此
  • Android 中的线程池

    Android 中的线程池 线程池的优点 重用线程池中的线程 避免因为线程的创建和销毁所带来的性能开销 能有效控制线程池的最大并发数 避免大量的线程之间因互相抢占系统资源而导致的阻塞现象 能够对线程进行简单管理 并提供定时执行以及指定间隔循
  • C#编程中遇到的一些异常及部分异常的解决方法

    以下内容是在本人在C 编程中遇到的异常 针对部分异常给出了解决办法 但是此解决方法是否真的好用 有待进一步考证 仅供参考 1 System Invalid Operation Exception 类型的未经处理的异常 出现在System W
  • itext5创建pdf表格及遇到的一些问题

    0 核心依赖 1 设置页眉图片及下划线 2 document参数传递 3 生成的pdf文件转base64编码 4 平方 上标显示问题 5 压缩包的文件流InputStream输出文件 6 itext5进行pdf合并 0 核心依赖
  • 病例对照研究中—两组组间比较—的统计方法选择,基于R语言

    医学中最常设计的试验就是病例对照研究 以探究某一干预措施是否有改善性 需要根据基线的情况 选择相应的方法 试验数据如下 声明 该数据是随机自动生成的 虚拟的 该计算结果不代表任何真实的事情 该数据不适用于现实世界 数据由试验组长病程10名
  • 模型选择、欠拟合和过拟合

    训练误差 training error 模型在训练数据集上表现出的误差 泛化误差 generalization error 模型在任意一个测试数据样本上表现出的误差的期望 常常通过测试数据集上的误差来近似 机器学习模型应该关注泛化误差 模型
  • 简单的开集电极保护电路

    开集电极方式输出经常用于需要向外强力驱动输出数字或者脉冲缓冲信号的情况 在严酷的工作环境下比如汽车系统 这些信号需要被保护用来抵抗那些加在输入信号上可以立即损坏三极管的不可预知的短路信号 通常在开集电极的输出端嵌入一系列电阻的方法也有它的缺
  • 关于"Ueditor 请求后台配置项http错误,上传功能将不能正常使用"的解决办法

    这两天用到Ueditor1 4 3 3的NET版本时 也遇上了这个问题 在网上查了一下 大多都是JS或者JAVA用户遇到的解决办法 另外少部份NET用户遇到 但按他们的方法试过后都不行 再说了按错误提示与自己网站的实际目录对比了一下 设置是
  • 爬虫学得好,然后呢?最新Python人工智能就业班课程

    课程链接 私信 达内 课程介绍 达内最新Python 人工智能就业班课程目录 1 Python核心 2 面向对象程序设计 3 Python高级 4 阶段项目实战 5 Linux操作系统 6 数据处理 7 网络并发编程 8 阶段项目实战 9
  • C++ 最长回文串

    已知一个只包括大小写字符的字符串 求用该字符串中的字符可以生成的最长回文字符串的长度 例如 s abccccddaa 可生成的最长回文字符串长度为9 如dccaaaccd adccbccda acdcacdca等 都是正确的 利用字符哈希方
  • 合肥工业大学密码学课设-RSA

    作者简介 CSDN内容合伙人 信息安全专业在校大学生 系列专栏 课设 密码学课设 RSA 新人博主 欢迎点赞收藏关注 会回访 舞台再大 你不上台 永远是个观众 平台再好 你不参与 永远是局外人 能力再大 你不行动 只能看别人成功 没有人会关
  • windows操作系统基础总结

    文章目录 引言 一 文件目录管理 二 网络配置 三 用户和群组 四 进程 五 核心文件 六 日志审核 七 登录日志 八 恶意行为跟踪 九 日志分析工具 引言 对windows下常见的dos命令进行总结 以及windows操作系统基础知识进行
  • Linux Centos7 测试硬盘IO速度

    1 测试磁盘写速度 time dd if dev zero of test dd bs 1M count 2000 2 测试磁盘读速度 time dd if test dd of dev null bs 1M
  • 云计算:优势与未来趋势

    文章目录 前言 一 云计算的优势 1 降低IT成本 2 提高工作效率 3 提高业务的可靠性和稳定性 4 提升安全性 二 未来发展趋势 1 AI与云计算的融合 2 边缘计算的发展 3 多云的趋势 4 服务器和存储的创新 三 行业应用案例 1
  • spring ioc流程

    spring 大体流程 spring的核心是ioc 所有的操作都是基于ioc来完成的 ioc是一个容器 为了解决类跟类之间的耦合问题 就是说 有一个A类 有一个B类 public class A B b new B public class