一、Spring 是什么
Spring 是轻量级、一站式 Java 企业级开发框架,核心目标:简化 Java 开发,降低软件开发的复杂性,为企业提供全面的编程和配置模型。
技术定位:一站式,技术生态圈。
-
创始人:Rod Johnson
-
核心两大思想:IOC(控制反转)、AOP(面向切面编程)
-
生态全家桶:Spring Core、Spring MVC、Spring Boot、Spring Cloud、Spring Data、Spring Security 等
-
- Spring Framework: 基础框架,提供核心容器等基础设施
- Spring Boot: 当前最流行的企业级开发方案(90%企业使用)
- Spring Cloud: 分布式系统开发解决方案
-
技术演进:
- 1.0时代:仅支持XML配置
- 2.0时代:引入注解开发
- 3.0时代:支持纯注解开发
- 5.0时代:全面支持JDK8
- 6.0时代:最新版本(2022年发布)
二、Spring架构
1. Spring Framework系统架构
-
核心容器(Core Container):
- 功能: 管理应用对象(Bean)的创建与依赖关系
- 组件: Beans, Core, Context, SpEL
-
AOP模块:
- 原理: 基于代理机制实现非侵入式功能增强
- 实现: 集成AspectJ实现
-
数据访问/集成(Data Access/Integration):
- 特性: 提供统一事务管理(基于AOP实现)
- 整合: 支持JDBC、ORM、JMS等技术
-
Web模块:
- 替代方案: 提供新的Web开发方式替代Servlet
-
Test模块:
- 用途: 支持单元测试和集成测试
三、核心两大特性
1. IOC / DI(控制反转 + 依赖注入)
(1)IOC 控制反转
传统开发:开发者 new 对象,控制权在代码里。 IOC:对象创建、管理、销毁交给 Spring IOC 容器,控制权反转给框架。 IOC 容器底层:BeanFactory(顶层接口)、ApplicationContext(常用子接口,功能更强)。
(2)DI 依赖注入(IOC 的实现方式)
容器自动给 Bean 注入依赖对象,无需手动 new。 三种注入方式:
- 构造器注入(官方推荐,不可变对象、强制依赖)
- setter 注入(可选依赖,灵活)
- 字段注入(
@Autowired,简单但有缺陷,不推荐生产大量使用)
常用 Bean 注解(组件扫描)
// 通用组件
@Component
// 分层细分
@Repository // Dao层
@Service // 业务层
@Controller // 控制层(MVC)
// 单例/多例
@Scope("singleton") // 默认单例
@Scope("prototype") // 每次获取新建对象
依赖注入注解
@Autowired:按类型注入,可配合@Qualifier("beanName")按名称@Resource:JSR 规范,先按名称、再按类型@Value:注入普通值、配置文件变量${key}
2. AOP 面向切面编程
核心:解耦通用横切逻辑(日志、事务、权限、监控、异常处理) 不修改业务代码,动态增强方法。
核心概念
-
切面 Aspect:横切逻辑类(日志类)
-
连接点 JoinPoint:所有可被拦截的方法
-
切点 Pointcut:匹配要拦截的方法表达式
execution(* com.xxx.service.*.*(..)) -
通知 Advice:切面执行时机
@Before:方法执行前@AfterReturning:正常返回后@AfterThrowing:异常抛出后@After:无论正常 / 异常最终执行@Around:环绕,可控制方法执行、返回值