Java后端开发主流技术栈以Spring生态为核心、ORM框架为持久层支撑,Spring凭借IoC、AOP两大核心思想实现组件解耦、事务管控、功能扩展,SpringMVC承接web请求处理,SpringBoot简化工程搭建与配置,MyBatis、JPA/Hibernate实现数据库ORM映射。整套框架体系是企业开发标配,也是笔试面试核心必考内容。
本文系统化覆盖六大核心模块:Spring IoC容器、Spring AOP切面编程、SpringMVC核心流程、SpringBoot自动配置原理、MyBatis映射机制、JPA与Hibernate核心区别,全程贴合工程实战、梳理底层原理、拆解易错坑点、配套高频面试真题,适配日常开发、框架进阶、求职刷题全场景。
一、Spring IoC 容器核心原理
IoC(Inversion of Control,控制反转)是Spring框架的核心基石,彻底颠覆传统对象主动创建的编程模式,将对象的创建、管理、依赖维护全部交给Spring容器,实现组件之间的解耦。配合DI(Dependency Injection,依赖注入)完成依赖自动装配,是所有Spring功能的基础。
1.1 核心思想:控制反转 + 依赖注入
传统开发:开发者主动 new 对象、维护对象依赖,代码耦合度极高,修改一处牵连多处。
IoC控制反转:将对象的控制权(创建、销毁、依赖)从开发者程序反转交给Spring容器,程序被动接收对象。
DI依赖注入:容器自动将依赖对象注入到目标Bean中,无需手动创建,是IoC的具体实现方式。
1.2 三种依赖注入方式
Spring支持构造器注入、setter注入、字段注入,官方优先推荐构造器注入。
-
构造器注入(官方推荐):通过类构造方法注入,保证依赖不可变、对象初始化即完整、线程安全,Spring4.3+单构造器可省略@Autowired
-
Setter注入:适合可选依赖、动态修改依赖场景,日常开发辅助使用
-
字段注入(不推荐):@Autowired直接注入字段,代码简洁但耦合严重、不利于单元测试、易产生循环依赖
1.3 Bean 核心特性
Bean定义:Spring容器管理的所有组件(Controller/Service/Dao)统称为Bean。
Bean作用域:
-
singleton(默认):单例,全局唯一,容器启动时初始化
-
prototype:多例,每次获取创建新对象
-
request/session:web专属,请求/会话级别生命周期
Bean生命周期:实例化 → 属性填充 → 初始化(前置处理、init方法) → 就绪使用 → 容器关闭销毁
1.4 核心坑点
1、单例Bean非线程安全:Spring单例是容器级别单例,多线程并发修改共享变量会出现线程安全问题;
2、字段注入易引发循环依赖,构造器注入可有效规避大部分循环依赖问题;
3、Bean必须交由容器管理才能触发注入,普通new对象无法获取Spring依赖。
本节面试真题
题目:IoC的核心是什么?为什么推荐构造器注入?
答案:IoC核心是控制权反转,容器统一管理对象与依赖,实现解耦;构造器注入可保证依赖必填、对象初始化完整、线程安全、规避循环依赖,是Spring官方最优规范。
二、Spring AOP 面向切面编程
AOP(Aspect Oriented Programming,面向切面编程)是Spring第二大核心,基于动态代理实现,在不修改原有业务代码的前提下,对方法进行增强,实现非业务通用功能解耦,是事务、日志、权限、限流、监控的底层支撑。
2.1 核心核心术语
-
连接点(JoinPoint):可以被增强的方法(所有Spring Bean的方法)
-
切入点(Pointcut):真正被拦截、需要增强的方法(精准匹配连接点)
-
通知(Advice):切面增强逻辑,分为前置、后置、异常、最终、环绕通知
-
切面(Aspect):切入点+通知的结合体,存放增强逻辑的类
-
织入(Weaving):将切面增强逻辑植入目标方法的过程
2.2 五大通知类型
-
@Before:前置通知,方法执行前触发
-
@AfterReturning:后置返回通知,方法正常执行完毕触发
-
@AfterThrowing:异常通知,方法抛出异常触发
-
@After:最终通知,无论方法正常/异常结束都会触发
-
@Around:环绕通知,可全权控制方法执行(最强大、最常用)
2.3 AOP 动态代理机制
Spring AOP 自动适配两种代理模式,无需手动指定:
1、目标类实现接口:默认使用 JDK 动态代理(基于接口代理);
2、目标类无接口:自动切换 CGLIB 动态代理(基于子类继承代理)。
2.4 实战应用场景
统一日志记录、统一事务管理、接口权限校验、请求耗时监控、参数校验、接口限流、缓存控制。
2.5 核心坑点
1、AOP 无法拦截内部调用方法(同类方法this调用,不走代理对象,无法增强);
2、private/静态方法无法被AOP拦截,仅支持public实例方法;
3、环绕通知必须手动执行proceed(),否则目标方法不执行。
本节面试真题
题目:JDK代理和CGLIB代理的区别?AOP为什么能实现无侵入增强?
答案:JDK代理基于接口、仅能代理接口实现类;CGLIB基于子类继承、无需接口。AOP基于动态代理,在运行时动态生成代理对象,不修改原业务代码,实现无侵入功能增强。
三、Spring MVC 核心原理
SpringMVC 是Spring生态的Web层框架,基于Servlet封装,遵循MVC架构模式,专门负责接收前端请求、参数解析、业务调度、视图响应,是Java Web开发的标准框架,也是SpringBoot Web的底层基础。
3.1 MVC架构思想
M(Model模型):业务数据、业务逻辑(Service、Entity);
V(View视图):页面展示、数据渲染(前端页面、JSON响应);
C(Controller控制器):请求接收、参数绑定、调用业务、返回结果。
3.2 核心执行流程(面试必考)
1、前端请求到达 DispatcherServlet(核心前端控制器);
2、DispatcherServlet 调用 HandlerMapping,匹配对应Controller处理器;
3、通过 HandlerAdapter 适配执行目标Controller方法;
4、自动完成参数绑定、类型转换、注解解析;
5、Controller调用Service业务层,返回数据结果;
6、ViewResolver 视图解析,封装JSON/页面结果响应前端。
3.3 核心组件
-
DispatcherServlet:中央调度器,整个MVC的入口核心
-
HandlerMapping:请求路径与控制器映射匹配
-
HandlerAdapter:适配不同类型处理器,统一执行标准
-
ViewResolver:视图解析器,处理返回视图与数据封装
3.4 常用核心功能
请求参数自动绑定、JSON序列化与反序列化、全局异常处理、拦截器、跨域处理、文件上传下载、请求校验。
本节面试真题
题目:SpringMVC的核心入口是什么?简述完整执行流程。
答案:核心入口为DispatcherServlet;请求经中央调度器拦截,通过处理器映射匹配接口,处理器适配器执行控制器方法,处理业务逻辑后,通过视图解析器封装结果,最终响应前端。
四、Spring Boot 自动配置原理
SpringBoot 基于Spring、SpringMVC封装,核心解决配置繁琐、依赖混乱、工程搭建复杂的问题,核心灵魂就是自动配置,实现零配置、快速开发、一键启动。
4.1 核心注解:@SpringBootApplication
该注解是复合注解,包含三大核心能力:
-
@Configuration:标识当前类为配置类
-
@ComponentScan:自动扫描当前包及子包下所有组件
-
@EnableAutoConfiguration:开启SpringBoot自动配置(核心)
4.2 自动配置核心原理(SPI + 条件注解)
1、SpringBoot启动时,通过SPI机制读取默认自动配置类;
2、通过大量条件注解判断环境:@ConditionalOnClass、@ConditionalOnMissingBean等;
3、满足条件则自动创建Bean、装配默认配置,无需手动XML/注解配置;
4、开发者可自定义配置覆盖默认自动配置,实现按需定制。
4.3 核心优势
1、剔除繁琐XML配置,实现零配置开发;
2、自动依赖管理,版本统一、杜绝版本冲突;
3、内置Tomcat容器,无需外置服务器,一键启动;
4、自动装配常用组件,极大提升开发效率。
4.4 核心坑点
1、自动配置基于类路径存在性判断,引入多余依赖会触发多余自动配置;
2、自定义Bean会覆盖默认自动配置Bean,可用于定制框架默认行为;
3、包扫描仅扫描启动类同级及子包,跨包组件无法自动注入。
本节面试真题
题目:SpringBoot自动配置的核心原理是什么?
答案:基于SPI机制加载所有自动配置类,结合条件注解按需装配组件,存在对应依赖且无自定义Bean时,自动初始化框架组件,实现零配置开箱即用。
五、MyBatis 核心映射机制
MyBatis 是一款轻量级ORM持久层框架,简化JDBC冗余代码,通过XML/注解实现SQL与代码解耦,核心是对象与数据库字段的映射机制,是目前企业主流持久层框架。
5.1 核心优势
1、SQL手动编写、灵活可控,适配复杂查询、多表关联;
2、ORM自动映射,数据库字段与实体类属性自动绑定;
3、剔除JDBC冗余代码,无需手动封装结果集;
4、支持动态SQL、参数绑定、结果映射、分页插件扩展。
5.2 核心映射原理
MyBatis 通过 Mapper映射文件 建立「实体类-数据库表」「属性-字段」的绑定关系:
-
同名自动映射:实体属性与数据库字段名一致,无需手动配置;
-
别名映射:通过resultMap配置字段与属性不一致映射(下划线转驼峰);
-
关联映射:支持一对一、一对多、多对多关联查询映射;
-
参数映射:自动封装简单参数、实体参数、集合参数。
5.3 核心特性
动态SQL:if、where、foreach、choose、trim,实现动态拼接查询条件,规避多余逗号、空条件问题;
一级缓存:默认开启,SqlSession级别缓存,同会话重复查询不走数据库;
二级缓存:Mapper级别全局缓存,跨会话共享,需手动开启配置。
5.4 核心坑点
1、#{} 预编译参数,防止SQL注入;${} 字符串拼接,存在SQL注入风险,禁止用于普通参数;
2、驼峰命名自动映射需手动开启配置,否则下划线字段无法映射到驼峰属性;
3、一级缓存会被增删改操作清空,二级缓存多线程环境需注意数据一致性。
本节面试真题
题目:#{}和${}的区别?MyBatis的映射原理是什么?
答案:#{}是预编译占位符,防止SQL注入、安全高效;${}直接字符串拼接,存在注入风险。MyBatis通过ResultMap实现数据库字段与实体属性的自动映射,封装JDBC结果集,实现数据持久化。
六、JPA 与 Hibernate 核心解析
JPA与Hibernate是一套全自动ORM规范与实现,彻底告别手写SQL,通过面向对象的方式操作数据库,适配快速开发、简单CRUD场景,和MyBatis形成鲜明互补。
6.1 核心关系:JPA是规范,Hibernate是实现
JPA(Java Persistence API):Sun官方定义的Java持久层统一规范,是一套接口、注解标准,无具体实现;
Hibernate:JPA规范的主流实现框架,是目前最成熟的全自动ORM框架,SpringData JPA底层默认依赖Hibernate。
6.2 核心特性
1、完全面向对象操作数据库,无需手写SQL,通过方法名、注解自动生成SQL;
2、丰富ORM注解:@Entity、@Table、@Id、@Column、@OneToMany等;
3、自动建表、自动更新表结构,适配快速迭代开发;
4、支持事务管控、懒加载、级联操作、数据关联映射。
6.3 核心优缺点
优点:开发效率极高、零SQL、代码简洁、ORM映射完善、适配快速迭代项目;
缺点:SQL自动化不可控,复杂查询、多表联查性能差,优化难度大,不适合超复杂业务系统。
6.4 MyBatis vs JPA/Hibernate 核心对比(面试高频)
-
MyBatis:半自动ORM,手动写SQL,灵活可控、性能优,适合复杂业务、大数据量、高并发系统
-
JPA/Hibernate:全自动ORM,自动生成SQL,开发快、效率高,适合简单CRUD、快速迭代、后台管理系统
本节面试真题
题目:JPA和Hibernate的关系?和MyBatis的适用场景区别?
答案:JPA是持久层规范接口,Hibernate是JPA的具体实现;MyBatis半自动、SQL可控、适合复杂高并发业务,JPA全自动、开发高效、适合简单CRUD快速开发场景。
七、全文终极背诵总结(面试必背)
1、Spring IoC:控制反转+依赖注入,容器统一管理Bean,解耦组件依赖,优先构造器注入,单例Bean默认线程不安全;
2、Spring AOP:基于动态代理实现无侵入方法增强,五大通知类型,解决日志、事务、权限通用功能解耦;
3、SpringMVC:Web层核心框架,DispatcherServlet为入口,完成请求接收、参数解析、业务调度、结果响应;
4、SpringBoot自动配置:基于SPI+条件注解,按需自动装配组件,零配置开箱即用,简化Spring繁琐配置;
5、MyBatis:轻量半自动ORM,手动可控SQL,通过ResultMap实现字段属性映射,#{}防SQL注入,适配复杂业务;
6、JPA&Hibernate:JPA是规范、Hibernate是实现,全自动ORM无需手写SQL,开发高效,适合简单CRUD场景。