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

spring的加载过程

Spring框架的加载过程可以分为几个关键步骤,这里简要概述如下:
1. 初始化容器:
        应用启动时,通常会创建一个ApplicationContext,这是Spring的核心组件,它负责管理所有Bean的生命周期。
ApplicationContext可以通过多种方式创建,比如使用ClassPathXmlApplicationContext加载XML配置文件,或者使用AnnotationConfigApplicationContext加载Java配置类。
2. 资源加载:
        根据创建ApplicationContext的方式,Spring会加载相应的配置资源。如果是XML配置,它会解析XML文件,如果是Java配置,它会扫描指定的包寻找带有特定注解(如@Configuration)的类。
3. Bean定义解析:
        解析过程中,Spring会识别出Bean定义,包括Bean的名称、类型、依赖关系、初始化方法、属性值等。
        对于XML配置,解析<bean>标签;对于Java配置,解析@Component、@Service、@Repository和@Controller等注解。
4. Bean注册:
        将解析出的Bean定义注册到IoC(Inversion of Control,控制反转)容器中,每个Bean定义对应一个唯一的ID。
5. 依赖注入(Dependency Injection, DI):
        Spring会分析Bean之间的依赖关系,根据注解或XML配置的指示,自动装配Bean的属性和依赖项。
6. Bean后处理器(Post Processors):
        Spring允许注册后处理器,这些处理器可以在Bean实例化前后执行自定义逻辑,例如@PostConstruct和@PreDestroy注解的处理。
7. 初始化Bean:
        对于单例Bean,Spring会在容器启动时初始化它们,对于原型Bean,只有在请求时才创建。
        可以通过@Lazy注解延迟单例Bean的初始化。
8. 容器准备完成:
        此时,ApplicationContext准备好,可以对外提供服务,包括获取Bean实例、广播事件等。
9. 应用程序运行:
        应用程序可以开始使用Spring容器提供的服务,通过ApplicationContext来获取和使用Bean。
10. 关闭容器:
        应用退出时,通常会调用ApplicationContext的close()方法,清理资源,执行@PreDestroy回调。

Spring Boot的加载过程与上述过程类似,但它简化了配置,通过@SpringBootApplication注解自动扫描和配置应用。此外,Spring Boot还引入了自动配置(Auto Configuration)机制,根据项目中的依赖来自动配置相关Bean。

相关文章:

  • 【机器学习】——驱动智能制造的青春力量,优化生产、预见故障、提升质量
  • 深入解析JVM堆内存管理:对象流转与优化策略全揭秘
  • d2-crud-plus 使用小技巧(六)—— 表单下拉选择 行样式 溢出时显示异常优化
  • 如何在Java中安全地在列表中插入元素
  • element-plus 自定义命名空间 el-config-provider namespace 不起作用,html 的class值改变了,但是样式不对
  • 【中年危机】程序猿自救指南
  • 【C#】多线程中,跨线程实现对UI控件更新
  • 【并发程序设计】15.信号灯(信号量)
  • 企业百度百科词条怎么修改
  • Python 将Word、Excel、PDF、PPT文档转为OFD文档
  • 使用老毛桃制作USB安装盘并安装WIN10系统完整过程
  • 基于SpringBoot+Vue租房网站设计和实现(源码+LW+部署文档+讲解等)
  • 德国RS SMA100A原装二手sma100a信号发生器6G
  • Springboot校园美食推荐系统的开发-计算机毕业设计源码44555
  • 【Java面试】七、SpringMvc的执行流程、SpringBoot自动装配原理
  • 【剑指offer】让抽象问题具体化
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • CSS 三角实现
  • JavaScript服务器推送技术之 WebSocket
  • LeetCode算法系列_0891_子序列宽度之和
  • node.js
  • overflow: hidden IE7无效
  • Spring Boot MyBatis配置多种数据库
  • spring学习第二天
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 扑朔迷离的属性和特性【彻底弄清】
  • 怎么将电脑中的声音录制成WAV格式
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 自定义函数
  • 最简单的无缝轮播
  • 做一名精致的JavaScripter 01:JavaScript简介
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​queue --- 一个同步的队列类​
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (1)Nginx简介和安装教程
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (第30天)二叉树阶段总结
  • (二)springcloud实战之config配置中心
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (三)uboot源码分析
  • (十一)手动添加用户和文件的特殊权限
  • (算法二)滑动窗口
  • (一)UDP基本编程步骤
  • (转)人的集合论——移山之道
  • (转)使用VMware vSphere标准交换机设置网络连接
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • **CentOS7安装Maven**
  • **PHP分步表单提交思路(分页表单提交)
  • .Family_物联网
  • .gitignore文件—git忽略文件