🌱 第一部分:Spring 核心原理与使用
1. 什么是 Spring
Spring 是一个开源的 Java 企业级开发框架,旨在简化 Java 企业应用程序开发。它核心思想是控制反转(IoC)和面向切面编程(AOP),使开发者能更轻松地创建松耦合、可测试和易维护的应用程序。
它提供了对 Bean 的生命周期管理、依赖注入、声明式事务管理、AOP 支持等功能,并与多种其他框架(如 Hibernate、MyBatis、Struts)高度兼容,形成了完整的企业级应用解决方案。
2. 什么是 SpringMVC
SpringMVC 是 Spring 框架中的一个模块,是一个基于 Servlet 的 Web 框架,遵循 MVC(Model-View-Controller)设计模式。它用于构建 Web 应用的表现层,负责处理请求和返回响应,核心处理器是 DispatcherServlet
,它协调整个请求流程。
3. 什么是 MyBatis
MyBatis 是一款持久层框架,通过 XML 或注解将 SQL 语句和 Java 方法关联起来,使开发者能够直接控制 SQL 的执行过程和映射规则,具有灵活、高效的特点。
它避免了 Hibernate 的全自动 ORM 的复杂性,允许开发者编写原生 SQL,使 SQL 更加可控、易调试。
4. Spring 的核心
-
IoC 容器:管理对象的生命周期与依赖关系。
-
AOP 支持:通过切面简化日志、安全、事务等横切关注点。
-
容器配置方式多样:支持 XML、注解、Java 配置类。
-
事务管理:声明式和编程式事务支持。
-
模块化架构:包括 Beans、Context、Core、AOP、JDBC 等模块。
5. Spring 的优点
-
解耦合:IoC 机制有效降低模块间耦合。
-
高扩展性:提供大量扩展点与标准接口。
-
易测试:可通过依赖注入替换真实对象。
-
广泛整合:与主流框架、库无缝集成。
-
轻量级:按需加载模块,避免臃肿。
6. @Autowired
与 @Resource
区别
特性 | @Autowired | @Resource |
---|---|---|
所属标准 | Spring | JSR-250 标准 |
注入方式 | 默认按类型(可配合 @Qualifier ) | 默认按名称(可使用 name 属性) |
适用范围 | Spring 内部推荐 | Java 通用注解 |
依赖检查 | 可设置 required=false | 不支持 |
7. Spring 的生命周期(Bean 生命周期)
-
加载 Bean 的定义信息(XML、注解、JavaConfig)
-
实例化 Bean(反射)
-
设置属性(依赖注入)
-
PostProcessor
后置处理 -
Bean 准备就绪使用
-
容器销毁时调用销毁方法(如
@PreDestroy
或 destroy-method)
8. 依赖注入的方式
-
构造器注入:通过构造方法传入依赖(推荐用于不可变对象)。
-
Setter 注入:通过属性 setter 方法注入。
-
字段注入:使用
@Autowired
注解直接注入(不推荐用于测试)。
9. Spring 中 Bean 是单例的吗?
默认是单例(singleton)。Spring 容器中 Bean 默认作用域是单例,也可配置为:
-
prototype
:每次获取都新建实例。 -
request
:每个 HTTP 请求一个实例(Web 项目)。 -
session
:每个会话一个实例。 -
application
:每个 ServletContext 一个实例。 -
websocket
:每个 WebSocket 一个实例。
10. 四大注解区别
注解 | 描述 | 所在层次 |
---|---|---|
@Component | 标识为普通组件(通用) | 任意层 |
@Controller | 标识控制层组件(处理请求) | 表现层 |
@Service | 标识服务层组件(业务逻辑) | 业务逻辑层 |
@Repository | 标识持久层组件(数据访问) | DAO 层 |
11. 控制反转与依赖注入
-
控制反转(IoC):将对象创建和管理的控制权交给容器,程序不再主动创建对象,而是由容器注入。
-
依赖注入(DI):容器在创建对象时,将它依赖的资源注入进来。
区别:IoC 是一种思想,DI 是实现 IoC 的技术手段。
🔁 第二部分:AOP 与常用注解
12. Spring AOP 术语
-
Aspect(切面):定义横切逻辑的模块。
-
JoinPoint(连接点):程序执行过程中可插入切面的点,如方法调用。
-
Pointcut(切入点):定义哪些 JoinPoint 被织入。
-
Advice(通知):切面在连接点执行的动作(如前置、后置)。
-
Weaving(织入):将切面逻辑加入到目标对象的过程。
13. 通知的类型
-
@Before
:方法前执行 -
@After
:方法后执行(无论成功或异常) -
@AfterReturning
:方法成功返回后执行 -
@AfterThrowing
:方法抛出异常后执行 -
@Around
:环绕整个方法执行(最强大)
14. 注解作用说明
-
@Configuration
:标识配置类,等价于 XML 配置文件 -
@Bean
:定义 Bean 方法,注册到容器中 -
@Controller
:标识控制器类,用于处理请求 -
@Value
:注入配置文件中的值
🌐 第三部分:SpringMVC 深入
15. MVC 模式
MVC 是一种设计模式:
-
Model:数据模型(如实体类、Service)
-
View:视图(如 JSP、Thymeleaf、HTML)
-
Controller:控制器,处理请求、调用服务、返回视图
16. SpringMVC 工作原理
-
用户请求由前端控制器
DispatcherServlet
接收 -
查找 HandlerMapping 获取对应 Controller
-
由 HandlerAdapter 调用处理器方法
-
方法执行返回
ModelAndView
-
视图解析器解析视图名
-
响应渲染返回给用户
17. SpringMVC 优点
-
请求处理流程清晰、可扩展性强
-
注解简化配置
-
支持 RESTful URL
-
与 Spring 紧密集成
18. 常用注解作用
-
@RequestMapping
:映射 URL 到方法 -
@ResponseBody
:返回 JSON 或 XML -
@PathVariable
:获取路径参数 -
@RequestParam
:获取请求参数
💾 第四部分:MyBatis 专项
19. BeanFactory vs ApplicationContext
特性 | BeanFactory | ApplicationContext |
---|---|---|
加载方式 | 延迟加载 | 预加载单例 Bean |
国际化支持 | 无 | 有 |
事件机制 | 不支持 | 支持 |
推荐使用场景 | 轻量应用 | 企业级开发推荐 |
20. 数据库事务的 ACID 特性
-
原子性(Atomicity):操作要么全部成功,要么全部失败。
-
一致性(Consistency):事务执行前后,数据保持一致。
-
隔离性(Isolation):并发事务之间互不干扰。
-
持久性(Durability):事务提交后修改永久保存。
21. MyBatis 优点
-
SQL 可控,便于优化
-
映射灵活,可自定义规则
-
轻量,易与 Spring 集成
-
支持动态 SQL
22. 常用标签说明
-
<select>
:查询语句 -
<insert>
:插入语句 -
<update>
:更新语句 -
<delete>
:删除语句 -
<resultMap>
:复杂结果映射 -
<if>
、<where>
、<foreach>
:动态 SQL 控制
23. #{}
与 ${}
区别
表达式 | 描述 | 安全性 |
---|---|---|
#{} | 占位符,预编译传参 | 安全(防 SQL 注入) |
${} | 直接拼接字符串 | 不安全(易被注入) |
24. 实现模糊查询的方式
<!-- XML 映射方式 -->
<select id="findByName" resultType="User">SELECT * FROM user WHERE name LIKE CONCAT('%', #{name}, '%')
</select>
// Mapper 接口方式
List<User> findByName(String name);