Spring Framework、SpringBoot、Mybatis、Freemarker

目录

一、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>
相关推荐
tsyjjOvO2 小时前
Spring 核心知识点全解析(IOC+AOP)
java·后端·spring
absunique2 小时前
Spring boot 3.3.1 官方文档 中文
java·数据库·spring boot
召田最帅boy2 小时前
Spring Boot博客系统集成AI智能摘要功能实战
人工智能·spring boot·后端
96772 小时前
spring boot 终端运行指令以及这个查询端口是否被占用,以及释放端口的命令
java·spring boot·后端
拾贰_C2 小时前
【idea | knife4j | springboot2/3|接上篇|终篇】knife4j版本号与spring boot版本不兼容问题(细节问题)
java·spring boot·intellij-idea
韩立学长2 小时前
基于Springboot医疗健康管理系统6sp2oz07(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
6+h2 小时前
【Spring】Mapper层常用注解详解
java·后端·spring
一路向北North2 小时前
Spring Security OAuth2.0(10):登出
java·后端·spring
HeartJoySpark2 小时前
Spring Boot 接入本地大模型:Spring AI 整合 Ollama 实现智能对话教程
人工智能·spring boot·spring·ai