目录
- [一、Spring Framework](#一、Spring Framework)
-
- 1、IOC(控制反转)
- 2、DI(依赖注入)
- 3、Bean容器
- 4、AOP(面向切面编程)
- [5、Spring MVC](#5、Spring MVC)
- [二、Spring Boot](#二、Spring Boot)
- 三、MyBatis
-
- [1、 MyBatis Generator(代码生成工具)](#1、 MyBatis Generator(代码生成工具))
- [2、MyBatis 运行流程(面试必背)](#2、MyBatis 运行流程(面试必背))
- [3、XML 配置核心](#3、XML 配置核心)
- [4、Mapper 接口与实现原理](#4、Mapper 接口与实现原理)
- 四、Freemarker
-
- [1. 注入对象及属性](#1. 注入对象及属性)
- [2. 循环及条件处理](#2. 循环及条件处理)
一、Spring Framework
1、IOC(控制反转)
核心思想:将对象的创建、依赖管理和生命周期交给Spring容器管理,而非程序员手动new,实现解耦。
本质:控制权从"程序员手动创建对象"反转到"Spring容器被动注入对象"。
底层支撑:依赖Java反射(动态创建对象)和SPI机制(加载扩展组件)实现。
2、DI(依赖注入)
定义:IOC的具体实现方式,Spring容器自动将依赖对象注入到目标Bean中。
常见注入方式:
属性注入:@Autowired直接注入成员变量(简单但可读性稍弱)。
构造方法注入:通过构造函数传入依赖。
3、Bean容器
(1)注入Bean(让Spring管理对象)
类级别注解:
@Controller:标注 Web 层组件
@Service:标注业务层组件
@Repository:标注数据访问层组件
@Component:通用组件(不属于前三者时使用)
@Controller 返回视图
@RestController = @Controller + @ResponseBody 返回数据
配置类方式:
@Configuration:标注配置类,相当于 XML 配置文件
@Bean:在配置类中修饰方法,将方法返回值注册为 Bean
(2)装配 Bean 对象(依赖注入的实现)
@Autowired:按类型自动装配(Spring 提供),配合 @Qualifier 可按名称指定。
@Resource:按名称自动装配(JSR-250 标准)。
@Bean 方法参数:Spring 会自动从容器中匹配并注入对应 Bean。
(3)Bean 生命周期
流程:实例化 → 属性填充 → 初始化(前置处理 → 初始化方法 → 后置处理) → 销毁。
4、AOP(面向切面编程)
核心思想:将日志、事务、权限等横切关注点从业务代码中抽离,通过代理实现功能增强,不侵入业务逻辑。(对某一类事务的集中处理)
底层实现:
JDK 动态代理:基于接口实现,目标类必须实现接口。
CGLib 动态代理:基于继承实现,可代理没有接口的类。
核心框架:Spring 整合 AspectJ 实现 AOP,核心概念:切面(Aspect)、通知(Advice)、切点(Pointcut)、连接点(JoinPoint)。
连接点:所有能增强的方法
切点:选中哪些方法要增强
通知:增强什么逻辑(日志 / 事务 / 权限)
切面:切点 + 通知,一整套增强方案
5、Spring MVC
(1)核心流程
客户端请求 → DispatcherServlet(前端控制器)
DispatcherServlet 调用 HandlerMapping 找到对应 Controller
调用 HandlerAdapter 执行 Controller 方法
Controller 返回 ModelAndView
ViewResolver 解析视图,渲染后返回给客户端
顾客(客户端)→ 服务员(DispatcherServlet,前端控制器)→ 后厨菜单(HandlerMapping,找对应厨师)→ 厨师(Controller,处理请求)→ 出餐(ModelAndView)→ 传菜员(ViewResolver,解析菜品)→ 顾客(返回响应)。
(2)核心注解
@RequestMapping:映射请求 URL 到控制器方法(可指定请求方法:GET/POST/PUT/DELETE)。
@PathVariable:从 URL 路径中获取参数(如 /user/{id} → @PathVariable Long id)。
方法自动注入对象:HttpServletRequest、HttpServletResponse、Model、Principal 等可直接在方法参数中声明,Spring 自动注入。
二、Spring Boot
1、核心思想
Spring Boot 的自动装配是「约定大于配置」的核心体现:无需手动编写 XML 配置,就能根据项目依赖自动创建并注入 Bean,简化开发流程。底层依赖 SPI 机制 加载配置、反射 创建实例。
SPI可以解耦接口与实现,Spring Boot 用来发现并加载所有自动配置类,无需硬编码。
SPI 是 Spring Boot 自动装配的「入口」,让框架能自动发现所有可配置的组件。
反射在运行时动态创建配置类和 Bean 实例,无需手动 new,实现「无代码侵入」的装配。
反射是自动装配的「执行器」,让 Spring 能在运行时灵活创建和管理对象。
2、自动装配流程
1、启动类 @SpringBootApplication 触发 @EnableAutoConfiguration,开启自动装配;
2、通过 SPI 机制 扫描 META-INF/spring/...AutoConfiguration.imports 文件,加载所有自动配置类;
3、对每个配置类,通过 @Conditional 注解判断是否满足装配条件;
4、满足条件的配置类通过 Java 反射 实例化,并创建其中 @Bean 方法对应的 Bean,注册到容器;
5、完成依赖注入,容器初始化完成。
三、MyBatis
1、 MyBatis Generator(代码生成工具)
用于快速生成基础 CRUD 代码,提升开发效率,避免手动编写重复的 SQL 和映射配置。
2、MyBatis 运行流程(面试必背)
1、加载核心配置文件 mybatis-config.xml,构建 SqlSessionFactory。
2、打开 SqlSession,获取 Mapper 接口的动态代理对象。
3、调用 Mapper 方法,MyBatis 根据方法名找到对应的 SQL 语句。
4、执行 SQL,将结果集映射为 Java 对象(通过 ResultMap)。
5、关闭 SqlSession,释放资源。
3、XML 配置核心
1、ResultMap 与实体类映射:自定义数据库字段与 Java 实体类属性的映射关系,解决字段名不一致问题。
association:处理一对一关系(如一个用户对应一个角色)。
collection:处理一对多关系(如一个用户对应多个订单)。
2、MyBatis SQL 语法
///:定义 SQL 语句。
//:动态 SQL,实现条件判断、循环拼接。
#{}:预编译参数,防止 SQL 注入;$ {}:直接拼接字符串(慎用,有注入风险)。
3、#{} 和 $ {} 的区别
#{} 是预编译参数,替换为 ?,参数单独传递;${} 是字符串拼接,直接替换为参数原始值。
#{} 采用预编译机制,SQL 结构固定(表名、列名不变),参数作为 ? 传递,数据库会自动转义参数中的特殊字符(如单引号);而 ${} 是直接拼接字符串,恶意参数会改变 SQL 结构,比如拼接 OR '1'='1' 就能查询所有数据,导致注入。
4、Mapper 接口与实现原理
Mapper 接口无需实现类,MyBatis 通过动态代理自动实现,底层依赖 JDK 动态代理和反射。
MyBatis 的 Mapper 代理本质是 AOP 思想的体现 ------ 在不修改接口代码的情况下,为接口方法增加 SQL 执行逻辑。
四、Freemarker
1. 注入对象及属性
Freemarker 是一种模板引擎,用于将 Java 对象数据渲染到 HTML 页面,实现前后端数据绑定。
2. 循环及条件处理
Freemarker 提供了丰富的指令(list、if、else、include 等),支持在模板中实现复杂的逻辑控制和页面渲染。
循环遍历
java
<#list userList as user>
${user.name}
</#list>
条件判断
java
<#if user.age gt 18>
成年人
<#else>
未成年人
</#if>