Spring框架核心知识深度解析

article/2025/7/30 9:33:23

Spring框架核心知识深度解析

最近正在复习Java八股,所以会将一些热门的八股问题,结合ai与自身理解写成博客便于记忆
在这里插入图片描述
今天将对spring常见问题做出解析

一、IOC与AOP核心原理

1. IOC(控制反转)详解

核心思想:将对象的创建、依赖注入的控制权从应用程序代码转移到Spring容器

实现机制

  • BeanFactory:基础容器接口
  • ApplicationContext:扩展容器(提供更多企业级功能)
  • 依赖注入方式:
    // 构造器注入(推荐)
    @Autowired
    public UserService(UserRepository repo) {this.repo = repo;
    }// Setter注入
    @Autowired
    public void setRepo(UserRepository repo) {this.repo = repo;
    }
    

IOC核心优势

  1. 解耦:对象间依赖关系由容器管理
  2. 可测试性:便于单元测试(可轻松替换依赖)
  3. 集中管理:统一配置和生命周期管理
  4. 灵活性:通过配置即可改变组件行为

2. AOP(面向切面编程)深度剖析

典型应用场景

  • 日志记录(方法调用追踪)
  • 事务管理(声明式事务)
  • 安全控制(权限校验)
  • 性能监控(方法执行时间统计)
  • 异常处理(统一异常捕获)

底层实现原理

// 代理模式示例(JDK动态代理)
public class JdkDynamicProxy implements InvocationHandler {private final Object target;public JdkDynamicProxy(Object target) {this.target = target;}public Object invoke(Object proxy, Method method, Object[] args) {// 前置增强System.out.println("Before method: " + method.getName());// 执行目标方法Object result = method.invoke(target, args);// 后置增强System.out.println("After method: " + method.getName());return result;}
}// 使用示例
Service proxy = (Service) Proxy.newProxyInstance(loader,new Class[]{Service.class},new JdkDynamicProxy(target)
);

二、Spring事务实现机制

1. 事务管理架构

核心组件

  • PlatformTransactionManager:事务管理抽象接口
  • TransactionDefinition:事务属性定义(隔离级别、传播行为等)
  • TransactionStatus:事务运行时状态

实现流程

  1. 代理拦截带有@Transactional的方法
  2. 根据配置获取事务(新建或加入现有事务)
  3. 执行业务逻辑
  4. 根据执行结果提交或回滚

2. 事务传播行为

传播行为类型说明
REQUIRED(默认)当前有事务则加入,没有则新建
REQUIRES_NEW总是新建事务,挂起当前事务
NESTED嵌套事务(Savepoint机制)
SUPPORTS有事务则加入,没有则以非事务方式执行

三、SpringBoot自动装配原理

1. 自动配置触发机制

@SpringBootApplication
↓ 包含
@EnableAutoConfiguration
↓ 触发
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

2. 条件装配注解

注解作用
@ConditionalOnClass类路径存在指定类时生效
@ConditionalOnMissingBean容器中不存在指定Bean时生效
@ConditionalOnProperty配置属性满足条件时生效
@ConditionalOnWebApplicationWeb环境时生效

3. 自定义Starter步骤

  1. 创建autoconfigure模块
  2. 编写自动配置类:
    @Configuration
    @ConditionalOnClass(MyService.class)
    @EnableConfigurationProperties(MyProperties.class)
    public class MyAutoConfiguration {@Bean@ConditionalOnMissingBeanpublic MyService myService() {return new MyServiceImpl();}
    }
    
  3. 添加META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件

四、Spring核心注解大全

1. 常用注解分类

类别注解示例说明
组件声明@Component, @Service声明Spring管理的Bean
依赖注入@Autowired, @Resource自动装配依赖
配置类@Configuration声明配置类
AOP相关@Aspect, @Before, @After切面编程
事务管理@Transactional声明事务边界
测试支持@SpringBootTest集成测试
条件装配@Conditional条件化Bean创建

五、Bean作用域详解

1. 标准作用域类型

作用域说明配置方式
singleton默认,单例模式@Scope(“singleton”)
prototype每次获取新实例@Scope(“prototype”)
request每个HTTP请求新实例@Scope(“request”)
session每个会话一个实例@Scope(“session”)
applicationServletContext生命周期@Scope(“application”)

2. 自定义作用域实现

public class ThreadScope implements Scope {private final ThreadLocal<Map<String, Object>> threadLocal = ThreadLocal.withInitial(HashMap::new);@Overridepublic Object get(String name, ObjectFactory<?> objectFactory) {Map<String, Object> scope = threadLocal.get();return scope.computeIfAbsent(name, k -> objectFactory.getObject());}// 其他方法实现...
}// 注册自定义作用域
context.getBeanFactory().registerScope("thread", new ThreadScope());

六、SpringMVC执行流程

1. 请求处理全流程

1. DispatcherServlet接收请求
2. 调用HandlerMapping获取处理器
3. 通过HandlerAdapter执行处理器
4. 执行拦截器preHandle
5. 调用Controller方法
6. 处理返回结果(View或@ResponseBody)
7. 执行拦截器postHandle
8. 渲染视图(如需)
9. 完成请求处理(afterCompletion)

2. 核心组件职责

组件职责
HandlerMapping映射请求到处理器
HandlerAdapter执行处理器方法
ViewResolver解析逻辑视图名到具体视图
HandlerExceptionResolver处理控制器抛出的异常
MultipartResolver处理文件上传请求

七、SpringBoot启动过程

1.创建SpringApplication实例
2.运行run()方法
3.加载SpringApplicationRunListener监听器
4.准备环境Environment
5.创建应用上下文ApplicationContext
6.准备Bean工厂BeanFactory
7.执行refreshContext()刷新上下文
8.调用ApplicationRunner和CommandLineRunner

1. 启动阶段分解

public ConfigurableApplicationContext run(String... args) {// 1. 准备环境ConfigurableEnvironment environment = prepareEnvironment();// 2. 创建应用上下文context = createApplicationContext();// 3. 准备上下文prepareContext(context, environment);// 4. 刷新上下文(核心)refreshContext(context);// 5. 执行RunnercallRunners(context, applicationArguments);return context;
}

2. 自动装配触发点

refreshContext()invokeBeanFactoryPostProcessors()ConfigurationClassPostProcessor处理自动配置类

八、Spring中的设计模式

1. 经典模式应用

设计模式应用场景实现示例
工厂模式BeanFactorygetBean()方法
单例模式默认Bean作用域@Scope(“singleton”)
代理模式AOP实现JDK动态代理/CGLIB
模板方法JdbcTemplateexecute()方法骨架
观察者模式事件机制ApplicationEventPublisher
适配器模式HandlerAdapter适配不同类型的Controller
装饰器模式BeanDefinitionDecorator增强Bean定义

九、高频面试题精解

Q1:Spring如何解决循环依赖?

三级缓存机制

  1. 一级缓存(singletonObjects):存放完整Bean
  2. 二级缓存(earlySingletonObjects):存放早期Bean引用
  3. 三级缓存(singletonFactories):存放Bean工厂

处理流程
A创建 → 暴露工厂到三级缓存 → 依赖B →
B创建 → 依赖A → 从三级缓存获取A的早期引用 →
B完成 → A注入B → A完成

Q2:动态代理选择策略?

  • 目标类实现接口:默认JDK动态代理
  • 目标类无接口:CGLIB代理
  • 强制CGLIB:@EnableAspectJAutoProxy(proxyTargetClass=true)

Q3:Bean生命周期关键步骤?

  1. 实例化(构造函数)
  2. 属性填充(依赖注入)
  3. 初始化前(@PostConstruct
  4. 初始化(InitializingBean
  5. 初始化后(AOP代理)
  6. 销毁前(@PreDestroy
  7. 销毁(DisposableBean

http://www.hkcw.cn/article/rvVtHnfvRj.shtml

相关文章

【第四十七周】HippoRAG 2 复现与分析(一):环境部署与代码分析

目录 摘要Abstract安装依赖试运行HippoRAG 初始化文档索引QA运行脚本 总结 摘要 本周对HippoRAG 2系统进行核心功能测试&#xff0c;通过构建小型结构化文档库&#xff08;如人物职业、童话事件、地理关系&#xff09;&#xff0c;验证其索引构建、动态增删、多轮检索问答及评…

【js逆向_AES】全国二手房指数数据爬取

目标&#xff1a;请求参数signcode&#xff0c;请求结果data。 网址&#xff1a;aHR0cDovL3d3dy5jY2hpbmRleC5jb20vSG9tZS9pbmRleA 查看载荷 查看响应数据 点击xhr&#xff0c;发现所有请求参数都是一个signCode&#xff0c;还是加密后的结果&#xff0c;对应结果中数据data也…

郑钦文社媒:人都应该有梦 刷新赛会最佳战绩

北京时间6月1日晚,在法网女单1/8决赛中,郑钦文战胜俄罗斯选手萨姆索诺娃,职业生涯首次跻身法网女单八强,刷新个人赛会最佳战绩。这也是中国选手时隔14年再次闯进法网八强。赛后,郑钦文在社交媒体上写道:“人都应该有梦,有梦就别怕痛,是一颗宝石就该闪烁。”她还祝所有的…

【第16届蓝桥杯 | 软件赛】CB组省赛第二场

个人主页&#xff1a;Guiat 归属专栏&#xff1a;算法竞赛 文章目录 A. 密密摆放&#xff08;5分填空题&#xff09;B. 脉冲强度之和&#xff08;5分填空题&#xff09;C. 25 之和D. 旗帜E. 数列差分F. 树上寻宝G. 翻转硬币H. 破解信息 正文 总共8道题。 A. 密密摆放&#xff0…

在线音乐服务器测试报告

1.项目背景 此项目主要用于模拟市面上主流的音乐软件的主要功能&#xff0c;提高自己的开发和测试能力。此项目采用的技术栈是SpringBoot MyBatis SpringMVC Mysql实现的&#xff0c;为了实现简单&#xff0c;方便测试&#xff0c;此项目没有注册功能&#xff0c;数据提前存…

球展世界,筑梦中原,2025郑州台球展会,年中招商即将开启

-壹肆柒2025中国&#xff08;郑州&#xff09;国际台球产业博览会暨全国台球产业链发展大会&#xff0c;将于2025年08月15-17日&#xff0c;在郑州中原国际会展中心盛大举办。本届博览会主题&#xff1a;同聚中原共赢未来&#xff0c;四个展馆&#xff0c;42000㎡的展览面积&am…

58、辣椒种植学习

辣椒&#xff08;学名&#xff1a;Capsicum annuum&#xff09;属于茄科辣椒属&#xff0c;是一种重要的蔬菜兼调味作物&#xff0c;具有较高的经济价值和营养价值。其果实富含维生素C、辣椒素等成分&#xff0c;既可鲜食&#xff0c;也可加工成干辣椒、辣椒粉、辣椒酱等产品&a…

SCSAI平台面向对象建模技术的设计与实现

一、核心设计思想 SCSAI平台的核心目标是通过元建模&#xff08;Meta-Modeling&#xff09;技术实现面向对象建模的零编码化。其核心思想为&#xff1a; 自反性设计&#xff1a;定义ObjectClassInfo (OCI)为元类&#xff08;Meta-Class&#xff09;&#xff0c;所有对象类均为…

三个细节 带你看懂中方在这届香会上的行动

这两天,谭主在第22届香格里拉对话会现场,参加了多场全体会议和平行会议。谭主在现场留意到三个细节,带你看懂中方在这届香会上的行动。细节一:中方提问美菲防长获东盟共鸣在昨天上午的第一场全体会议上,来自国防大学的张弛教授提问美国国防部长将如何处理美国联盟与东盟国…

UDP/TCP协议全解

目录 一. UDP协议 1.UDP协议概念 2.UDP数据报格式 3.UDP协议差错控制 二. TCP协议 1.TCP协议概念 2.三次握手与四次挥手 3.TCP报文段格式&#xff08;重点&#xff09; 4.流量控制 5.拥塞控制 一. UDP协议 1.UDP协议概念 当应用层的进程1要向进程2传输报文&#xff…

话题通信之python实现

在机器人操作系统&#xff08;ROS&#xff09;中&#xff0c;话题通信是一种常见的通信方式&#xff0c;它允许不同的节点之间通过主题进行数据交换。本文将介绍如何使用Python实现ROS话题通信&#xff0c;包括发布者和订阅者的编写。这种方法与使用C实现类似&#xff0c;但Pyt…

中国高分辨率高质量地面NO2数据集(2008-2023)

时间分辨率&#xff1a;日空间分辨率&#xff1a;1km - 10km共享方式&#xff1a;开放获取数据大小&#xff1a;15.36 GB数据时间范围&#xff1a;2008-01-01 — 2023-12-31元数据更新时间&#xff1a;2024-08-19 数据集摘要 ChinaHighNO2数据集是中国高分辨率高质量近地表空气…

射频通信概述

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…

设置堆空间的最大值(-Xmx)应该要考虑哪些因素?

需要根据系统的配置来确定&#xff0c;要给操作系统和JVM其他内存区域&#xff08;栈、方法区&#xff09;留下一定的剩余空间。推荐配置系统或容器里可用内存的70%~80%最好。 假设物理内存是8G,设置多大堆内存比较合适&#xff1f; 系统有8G物理内存&#xff0c;系统自己可能会…

wordpress免费主题网站

这是一款WordPress主题&#xff0c;由jianzhanpress开发&#xff0c;可以免费下载。专为中小微企业设计&#xff0c;提供专业的网站建设、网站运营维护、网站托管和网站优化等服务。主题设计简约、现代&#xff0c;适合多种行业需求。 主要特点&#xff1a; 多样化展示&#…

SGLang 无法正常部署

1. 考虑 torch 版本 与 SGLang 不兼容&#xff1a; -> Python环境中的包被更新&#xff08;如torch, deepspeed, transformers等&#xff09;导致不兼容 - 参考&#xff1a;Exception: Capture CUDA graph failed: CUDA error: out of memory-CSDN博客 # 虽然锁定了 sg…

【拓扑排序】P6560 [SBCOI2020] 时光的流逝|普及+

本文涉及知识点 C图论 拓扑排序 P6560 [SBCOI2020] 时光的流逝 题目背景 时间一分一秒的过着&#xff0c;伴随着雪一同消融在了这个冬天&#xff0c; 或许&#xff0c;要是时光能停留在这一刻&#xff0c;该有多好啊。 … “这是…我在这个小镇的最后一个冬天了吧。” “嗯…

第13讲、Odoo 18 配置文件(odoo.conf)详细解读

1. 概述 Odoo 配置文件&#xff08;odoo.conf&#xff09;是管理 Odoo 服务器行为的核心工具&#xff0c;涵盖了网络、安全、数据库、性能等多方面的关键参数。本文档系统梳理 Odoo 18 配置文件的主要参数&#xff0c;结合实际应用场景&#xff0c;提供权威的配置建议与最佳实…

“大巴黎”欧冠夺冠引发法国多地骚乱

法甲球队巴黎圣日耳曼5月31日晚赢得欧冠联赛冠军奖杯,法国多地球迷彻夜庆祝。据法国内政部消息,狂欢夜有559人因滋事被捕,并发生两起命案。据法国媒体援引法国内政部等信源,在巴黎,一名20岁男子骑摩托车与汽车相撞,导致重伤不治身亡。在法国西南部城市达克斯,一名17岁未…

马斯克最新发声:不想为美政府所做的一切承担责任

当地时间6月1日,美国企业家埃隆马斯克当日在接受美国哥伦比亚广播公司的采访时表示,他不想公开反对美国政府,但也不想为政府所做的一切承担责任。马斯克在采访中表示,他所领导的“政府效率部”成了一切的替罪羊,所有的裁员无论是真是假都被怪罪到了“政府效率部”的头上。…