Spring - 教程

news/2025/10/22 16:50:46/文章来源:https://www.cnblogs.com/lxjshuju/p/19158390

SpringBoot的启动原理?

1.运行Main方法: 应用程序启动始于Main方法的执行。在Main方法中,创建了一个SpringApplication实例,用于引导应用程序的启动。同时,SpringApplication会根据spring.factories记录加载并注册监听器、ApplicationContextInitializer等扩展接口实现。
应用程序启动的入口。在这一步,Spring Boot会 启动Spring进而创建内置tomcat,进去run方式后还做了很多其他事:就是2.运行run方法: 运行SpringApplication的run方法
3. Spring Boot会读取和解析环境变量、配置文件(如application.properties或application.yml)等,以获取应用程序的调整信息。
4.之后再创建ApplicationContext也就是我们熟知的Spring上下文: 在这一步,Spring Boot会根据应用程序的类型(例如,Web应用程序)创建相应的ApplicationContext。对于Web应用程序,通常创建的是ServletWebServerApplicationContext。
5.预初始化上下文: Spring Boot会将启动类作为安装类,读取并注册为BeanDefinition,这使得Spring容器能够识别应用程序的配置。
6.调用refresh: 此时,Spring Boot调用了refresh办法来加载和初始化Spring容器。在这一过程中,会执行一系列操作,包括解析@Import注解以加载自动配置类,创建和注册BeanDefinition等。
通过7.创建内置servlet容器: 如果应用程序是一个Web应用程序,Spring Boot会在这一步创建内置的servlet容器(例如Tomcat),以便应用程序可以接受HTTP请求。这个容器将被Spring Boot自动配置,并且能够通过部署进行自定义。
8.监听器和扩展点: 在整个启动过程中,Spring Boot会调用各种监听器和扩展点,这些组件可以用来对应用程序进行扩展和定制。例如,您可以使用监听器来处理应用程序启动和关闭事件,或者使用ApplicationContextInitializer来自定义ApplicationContext的初始化。
总的来说,Spring Boot的启动过程是一个困难的流程,它从Main方法开始,经过一系列步骤来初始化Spring容器和启动内置tomcat。

介绍下SpringAop的底层达成?

答:参考答案:
Spring AOP 凭借 JDK 动态代理 或 CGLIB 动态代理 创建代理对象,并结合 拦截器链 实现通知逻辑的增强,最终在不修改目标类的情况下实现横切关注点的分离。

  1. 动态代理:
    ● JDK 动态代理:目标类实现接口时使用,基于 ProxyInvocationHandler
    ● CGLIB 动态代理:目标类未完成接口时使用,基于字节码生成子类。
    ● 默认优先 JDK 动态代理,可通过设置强制应用 CGLIB。

  2. 拦截器链:
    ● 将通知(Advice)封装为拦截器(MethodInterceptor)。
    ● 方法调用时,代理对象通过拦截器链按顺序执行增强逻辑,最终调用目标方法。

  3. 执行流程:
    ● 创建代理对象 → 拦截方法调用 → 执行拦截器链 → 调用目标方法 → 返回结果。

一句话总结:Spring AOP 经过动态代理(JDK 或 CGLIB)和拦截器链构建途径增强,做完横切关注点的分离。

讲讲Mybatis 的一级、二级缓存?

MyBatis提供了两种级别的缓存:一级缓存(本地缓存)和二级缓存(全局缓存)。它们分别位于不同的作用范围,有不同的特性和使用场景。
一级缓存(本地缓存):

  1. 作用范围: 一级缓存是在SqlSession的生命周期内有效,也就是说,每个SqlSession拥有独立的一级缓存。
  2. 默认开启: 一级缓存在MyBatis中默认是开启的,无需额外配置。
  3. 特点: 当执行查询操作时,查询的结果会被缓存在当前SqlSession中。如果再次执行相同的查询,MyBatis会首先尝试从缓存中获取数据,而不再访问数据库。
  4. 自动刷新: MyBatis会在执行insert、update、delete等写操作时自动清空一级缓存,以保持数据的一致性。
    二级缓存(全局缓存):
  5. 作用范围: 二级缓存是在多个SqlSession之间共享的,即多个SqlSession允许共享同一个二级缓存。
  6. 安装开启: 二级缓存需要手动部署开启,需要在映射文件的标签下添加元素。
  7. 特点: 二级缓存能够跨SqlSession共享查询结果,有效减少数据库访问次数。它的素材存储在全局范围的缓存中,可以由多个SqlSession访问。
  8. 缓存策略: 你可以根据需求选择不同的缓存策略(例如LRU、FIFO等),以及配置缓存的大小、刷新间隔等参数。
  9. 通过注意事项: 二级缓存可以缓存的对象需要是可序列化的,要确保对象能够正确地序列化和反序列化。另外,对于关联内容的更新操作,需要手动清除相关的二级缓存,以避免脏资料的问题。

应该注意的是,虽然缓存可以提高查询性能,但不合理的使用缓存可能导致数据不一致等问题,特别是在分布式环境下。因此,在使用缓存时需要根据业务需求和性能测试结果进行合理的配置和管理。

Springboot的自动配置原理?–springboot面试必问题

1.引入@EnableAutoConfiguration: 在Spring Boot应用程序的主配置类(通常是带有@SpringBootApplication注解的类)中,通常会引入@EnableAutoConfiguration注解,该注解负责启动自动配置功能。
2.@EnableAutoConfiguration引入了@Import: @EnableAutoConfiguration注解实际上是借助@Import注解引入的。这意味着它会导入其他配置类,这些配置类包含了Spring Boot自动配置的逻辑。
3.解析@Import注解: 当Spring容器启动时,会解析@Import注解,并加载相应的配置。
4.deferredImportSelector: 通过@Import导入的配置类中可能含有了一个deferredImportSelector,它的作用是确保Spring Boot的自动配置类在最后加载,以便方便扩展和覆盖。
5.读取META-INF/spring.factories文件: Spring Boot通过SPI(Service Provider Interface)机制,读取类路径下的META-INF/spring.factories资料,该文件包含了各种自动配置类的配置。
6.过滤出AutoConfigurationClass: 从spring.factories文件中,Spring Boot会过滤出所有AutoConfigurationClass类型的类,这些类囊括了自动安装的具体实现。
7.条件化加载: 最后,Spring Boot会根据条件(@ConditionalXXX注解)来排除或涵盖特定的自动配置类。这些条件会根据应用程序的环境和配置动态生效。
通过@EnableAutoConfiguration注解引入自动配置逻辑,之后解析@Import注解,加载各种配置类,包括deferredImportSelector和自动配置类。通过SPI机制读取spring.factories文件,过滤出自动配置类,并根据条件化配置来动态加载这些类,从而实现自动配置的作用。这种机制使得Spring Boot应用程序许可根据环境和需求自动配置,极大地简化了开发和部署的工作。就是总结起来,Spring Boot的自动配置原理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/943514.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序在vant框架的基础上自定义多选框

微信小程序在vant框架的基础上自定义多选框1 简介微信小程序官方和vant框架都没有提供很方便的多选框,所以自己定义一个组件2 代码 select-checkbox 2.1 json{"component": true,"usingComponents&quo…

例子:vue3+vite+router创建多级导航菜单

第一部分 1、初始化项目npm init vite@latestnpm run dev :运行项目 q+Enter:退出运行 2、安装路由依赖npm install vue-router@4 # Vue3 对应 vue-router 4.x 版本 第二部分: 创建页面组件 在 src/views/home/an…

JVM探究(Leo)

JVM探究 面试问题: 请你谈谈你对jvm的理解?java8虚拟机和之前的更新变化? ​ 答:理解如该文档,java8将方法区被取代为了元空间,字符串常量数据改存到堆里面,元空间改用本地内存 什么是OOM,什么是栈溢出StackOve…

2025 年最新推荐!集装箱拖车供应厂家权威榜单重磅发布,全方位解析优质厂家实力助企业选对合作伙伴

在当前集装箱运输行业快速发展的背景下,企业对高效、安全、可靠的集装箱拖车服务需求日益迫切,但市场上厂家资质参差不齐、服务质量不稳定、运输安全风险难控等问题,让企业在选择合作伙伴时面临诸多困扰。为帮助企业…

实战案例 | 利用山海鲸可视化软件,构建制造业数字孪生监控大屏

副标题:——一位制造业IT人的数字孪生落地经验引言: “数字孪生不是‘花架子’,而是制造业的‘透视镜’!”作为常年泡在车间的数字化转型专员,我见过太多号称“高大上”的数字孪生方案,最终因为操作复杂、数据脱…

【IEEE出版 | 往届4年稳定EI检索 | 高录用、稳定检索】第五届无线通信、网络与物联网国际学术会议(WCNIoT 2025)

第五届无线通信、网络与物联网国际学术会议(WCNIoT 2025)于2025年11月7日举行。【国际名校-悉尼大学主办!(QS世界大学排名:世界第18名)】 【往届4年稳定EI检索!高录用、稳定检索!| IEEE Fellow参会交流,进行主…

SS251021B. 箱客思 做题记录 - 邻补角

题目 采用类似某道 ABC 类似的题,直觉发现最大值肯定是每次都放回去,而最小值应该是每次都不放回去。 考虑最大值 \(E_1\) 怎么求。正难则反,设 \(P(x)\) 为操作 \(x\) 次游戏结束地概率,设 \(Q(x)\) 为操作 \(x\)…

AI与低代码时代下,网站研发岗位的转型与未来展望

AI与低代码时代下,网站研发岗位的转型与未来展望2025-10-22 16:40 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displa…

完整教程:第10课:Prompt工程优化:指导DeepSeek模型生成更精准的答案

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

做题情况

P9941: 偶数多则用偶数和奇数相加变奇数,奇数多则奇数加奇数变偶数,贪心。 P11226: 使用 Trie 树根据字母大小关系建有向边,不是 DAG 输出无解,否则跑一遍拓扑排序。 P3369: 平衡树模板,我用的 FHQ Treap。 P3…

Redis缓存测试思路

Redis缓存测试思路一,什么是Redis Redis是一个非关系型数据库,仅使用内存储存数据,避免了I/O的限制,显著提升了数据访问效率。 Redis可以用于缓存,订阅,消息队列,计数器(浏览数,播放数)。本文探讨redis缓存功…

权威调研榜单:无线电环形导轨配件生产厂家TOP3榜单好评深度解析

在工业自动化快速发展的背景下,无线电环形导轨作为智能制造领域的核心传动部件,其市场需求持续增长。行业数据显示,2024年我国工业自动化装备市场规模预计突破3500亿元,其中环形导轨配件市场年均增速达18%以上。本…

086_尚硅谷_switch基本使用

086_尚硅谷_switch基本使用1.switch分支和基本语法2.switch流程图3.switch流程图说明和总结4.switch流程案例

Redis应用(Leo)

Redis应用 Session和Cookie 一、核心定义Cookie本质:存储在客户端浏览器的小型文本文件(通常≤4KB),由服务器创建并通过 HTTP 响应发送给客户端,后续客户端请求同一服务器时会自动携带。 核心作用:作为 “身份标…

1.51.0 mm LTCC低通,DC-3.7 GHz,带内插损≤0.6 dB,军工温宽——国产HT-LFCG-3700+(Pin-to-Pin替代LFCG-3700+)

1.51.0 mm LTCC低通,DC-3.7 GHz,带内插损≤0.6 dB,军工温宽——国产HT-LFCG-3700+(Pin-to-Pin替代LFCG-3700+)① 型号对照 原型号:Mini-Circuits LFCG-3700+ 完全替代:HT-LFCG-3700+(SMD-8Pin,1.5 mm1.0 mm0.…

从零开始制作操作系统—— 最简单的操作系统内核

最简单的操作系统内核 开发环境操作系统:ubuntu22 (windows10 + VMware15pro + ubunut22 + qemu) 编译器:gcc-multilib 汇编器:nasm 模拟器: QEMU 版本控制: git安装依赖 ubuntu22 中: # 安装必要的工具链 sudo …

【CSP出版 | 最快投稿后一个月见刊 | 检索稳定】2025年艺术、教育与管理国际学术会议(ICAEM 2025)- 第六期

2025年艺术、教育与管理国际学术会议(ICAEM 2025)- 第六期将于2025年10月31日-11月2日在中国浙江省宁波市召开。【高录用快见刊:最快投稿后一个月见刊,见刊快速】 【录用信息完整:含ISSN号,DOI,封面目录】 2025…

【LeetCode 每日一题】120. 三角形最小路径和——(解法二)自底向上 - 实践

【LeetCode 每日一题】120. 三角形最小路径和——(解法二)自底向上 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fami…

HDFS Java api操作-cnblog

HDFS Java API操作 1 启动服务 zkServer.sh start (每个节点都要启动) #下面的只在主节点上启动就行 start-all.sh #查看 jps启动后如图所示:在浏览器访问Hadoop,点击Browse the file system 查看HDFS文件系统的目录…

Pandas 深入学习【3】材料标准化处理 StandardScaler

Pandas 深入学习【3】材料标准化处理 StandardScalerpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…