🌱 第一部分: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);