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流程 的相关文章

  • 如何创建一个显示 Spinners 的 x 和 y 值的表格?

    我想创建一个位于图表右侧的表格 其中显示 2 列 x 和 y 值已输入到xSpin and ySpin旋转器 我已经画了一张我想要桌子放置的位置的图 我尝试过在网格窗格布局中使用文本框来创建表格并将值直接输入到文本框网格中 但是我无法将它们
  • org.apache.sling.api.resource,version=[2.3,3) -- 无法解析

    您好 我无法访问我的项目内容 我已经上传了从 CQ 访问内容所需的所有包 我唯一能看到的是 org apache sling api resource version 2 3 3 无法解析 这是否是异常的原因 如果是 请告诉我如何解决 中Q
  • OpenCV 中的 Gabor 内核参数

    我必须在我的应用程序中使用 Gabor 过滤器 但我不知道这个 OpenCV 方法参数值 我想对虹膜进行编码 启动 Gabor 过滤器并获取特征 我想对 12 组 Gabor 参数值执行此操作 然后我想计算 Hamming Dystans
  • 正则表达式拆分数字和字母组,不带空格

    如果我有一个像 11E12C108N 这样的字符串 它是字母组和数字组的串联 如何在中间没有分隔符空格字符的情况下分割它们 例如 我希望分割结果为 tokens 0 11 tokens 1 E tokens 2 12 tokens 3 C
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • OSGi:如果不取消服务会发生什么

    这是我获取 OSGi 服务的方式 ServiceReference reference bundleContext getServiceReference Foo class getName Foo foo Foo bundleContex
  • 如何安全地解决这个 Java 上下文类加载器问题?

    我的数百名用户中只有一位在启动我的 Java 桌面应用程序时遇到问题 他只有大约三分之一的时间开始 另外三分之二的时间在启动时抛出 NullPointerException Exception in thread AWT EventQueu
  • 我需要什么库才能在 Java 中访问这个 com.sun.image.codec.jpeg?

    我正在用java创建一个图像水印程序 并导入了以下内容 import com sun image codec jpeg JPEGCodec import com sun image codec jpeg JPEGEncodeParam im
  • 在 S3 中迭代对象时出现“ConnectionPoolTimeoutException”

    我已经使用 aws java API 一段时间了 没有遇到太多问题 目前我使用的是库 1 5 2 版本 当我使用以下代码迭代文件夹内的对象时 AmazonS3 s3 new AmazonS3Client new PropertiesCred
  • 将 SignedHash 插入 PDF 中以进行外部签名过程 -workingSample

    遵循电子书第 4 3 3 节 PDF 文档的数字签名 https jira nuxeo com secure attachment 49931 digitalsignatures20130304 pdf 我正在尝试创建一个工作示例 其中 客
  • 很好地处理数据库约束错误

    再一次 它应该很简单 我的任务是在我们的应用程序的域对象中放置一个具有唯一约束的特定字段 这本身并不是一个很大的挑战 我刚刚做了以下事情 public class Location more fields Column unique tru
  • 使用过滤器@ComponentScan所有包的危险

    我现在正在开发一个概念应用程序 我想使用组件扫描来使用特定的自定义 Spring 元注释来获取类路径上任何位置的所有类 我的注释如下所示 Target value ElementType TYPE Retention value Reten
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • Java整数双除法混淆[重复]

    这个问题在这里已经有答案了 方案1 int sum 30 double avg sum 4 result is 7 0 not 7 5 VS 方案2 int sum 30 double avg sum 4 0 Prints lns 7 5
  • Cucumber Java 与 Spring Boot 集成 - Spring @Autowired 抛出 NullPointer 异常

    我正在为 Spring boot 应用程序编写 cucumber java 单元测试来测试每个功能 当我与 Spring Boot 集成时 Autowired 类抛出 NullPointer 异常 Spring Boot应用程序类 Spri
  • 将 Azure AD 高级自定义角色与 Spring Security 结合使用以进行基于角色的访问

    我创建了一个演示 Spring Boot 应用程序 我想在其中使用 AD 身份验证和授权 并使用 AD 和 Spring Security 查看 Azure 文档 我执行了以下操作 package com myapp contactdb c
  • 具有特定参数的 Spring AOP 切入点

    我需要创建一个我觉得很难描述的方面 所以让我指出一下想法 com x y 包 或任何子包 中的任何方法 一个方法参数是接口 javax portlet PortletRequest 的实现 该方法中可能有更多参数 它们可以是任何顺序 我需要
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • Trie 数据结构 - Java [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有任何库或文档 链接提供了在 java 中实现 Trie 数据结构的更多信息 任何帮助都会很棒 Thanks 你可以阅读Java特里树
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import

随机推荐

  • 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