Spring框架简介
Spring发展历史
版本演进
| 版本 | 发布时间 | 重要特性 |
|---|---|---|
| Spring 1.0 | 2004年 | IoC容器、AOP |
| Spring 2.0 | 2006年 | XML配置简化、命名空间 |
| Spring 3.0 | 2009年 | Java配置、REST支持 |
| Spring 4.0 | 2013年 | Java 8支持、WebSocket |
| Spring 5.0 | 2017年 | 响应式编程、Kotlin支持 |
| Spring 6.0 | 2022年 | Jakarta EE 9、Java 17 |
| Spring 7.0 | 2025年 | Jakarta EE 11、Java 25 |
Spring的诞生
Spring由Rod Johnson创建,最初是为了解决J2EE开发的复杂性。2002年,Rod Johnson出版了《Expert One-on-One J2EE Design and Development》,提出了Spring的核心理念。
Spring生态体系
核心项目
Spring生态系统
├── Spring Framework(核心框架)
│ ├── Core(IoC、AOP)
│ ├── Context(上下文)
│ ├── Beans(Bean管理)
│ ├── Web(Web支持)
│ └── Data Access(数据访问)
│
├── Spring Boot(快速开发)
│ ├── 自动配置
│ ├── 起步依赖
│ ├── Actuator
│ └── CLI
│
├── Spring Cloud(微服务)
│ ├── Netflix OSS集成
│ ├── Config
│ ├── Gateway
│ └── Stream
│
├── Spring Data(数据访问)
│ ├── JPA
│ ├── MongoDB
│ ├── Redis
│ └── Elasticsearch
│
├── Spring Security(安全)
│ ├── 认证
│ ├── 授权
│ └── OAuth2
│
├── Spring Integration(集成)
│ ├── 消息
│ ├── 流程
│ └── 事件
│
└── Spring Batch(批处理)
├── Job
├── Step
└── Chunk项目关系
Spring Framework(基础)
↓
Spring Boot(简化开发)
↓
Spring Cloud(微服务)Spring核心概念
IoC(控制反转)
传统方式:
java
public class UserService {
private UserDao userDao = new UserDaoImpl(); // 自己创建对象
}IoC方式:
java
public class UserService {
private UserDao userDao; // 由容器注入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}理解IoC:
- 控制反转:对象创建的控制权交给容器
- 依赖注入:容器负责注入依赖关系
- 解耦:降低组件之间的耦合度
DI(依赖注入)
构造器注入:
java
public class UserService {
private final UserDao userDao;
public UserService(UserDao userDao) {
this.userDao = userDao;
}
}Setter注入:
java
public class UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}字段注入:
java
public class UserService {
@Autowired
private UserDao userDao;
}AOP(面向切面编程)
概念:
- 切面(Aspect):横切关注点的模块化
- 切点(Pointcut):定义在哪些地方执行
- 通知(Advice):定义执行什么操作
- 连接点(Joinpoint):程序执行的特定点
示例:
java
@Aspect
@Component
public class LoggingAspect {
@Before("execution(* com.example.service.*.*(..))")
public void logBefore(JoinPoint joinPoint) {
System.out.println("执行方法: " + joinPoint.getSignature().getName());
}
}容器
ApplicationContext:
java
// 创建容器
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
// 获取Bean
UserService userService = context.getBean(UserService.class);
// Java配置
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);Spring 7新特性概览
技术基线升级
| 组件 | Spring 6 | Spring 7 |
|---|---|---|
| Java | 17+ | 17+(推荐21/25) |
| Jakarta EE | 9+ | 11 |
| Tomcat | 10+ | 11+ |
| Jetty | 11+ | 12+ |
核心新特性
1. Null-Safety(JSpecify)
java
import org.jspecify.annotations.Nullable;
import org.jspecify.annotations.NullMarked;
@NullMarked
public class UserService {
// 默认非空
public String getName() {
return "张三";
}
// 明确标注可空
@Nullable
public String getNickname() {
return null; // OK
}
}2. BeanRegistrar
java
public class MyBeanRegistrar implements BeanRegistrar {
@Override
public void register(BeanRegistry registry, BeanRegistrar.Context context) {
registry.registerBean(MyService.class,
spec -> spec.primary(true).lazyInit(true));
}
}3. API版本控制
java
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping(version = "1")
public UserV1 getUserV1() {
return new UserV1();
}
@GetMapping(version = "2")
public UserV2 getUserV2() {
return new UserV2();
}
}4. 内置弹性能力
java
@Service
public class UserService {
@Retryable(maxAttempts = 3, backoff = @Backoff(delay = 1000))
public User getUser(Long id) {
// 自动重试
}
@ConcurrencyLimit(maxConcurrency = 10)
public void process() {
// 并发限制
}
}5. HTTP Service Clients
java
@HttpServiceClient("user-service")
public interface UserServiceClient {
@GetExchange("/users/{id}")
User getUser(@PathVariable Long id);
@PostExchange("/users")
User createUser(@RequestBody User user);
}Spring vs 其他框架
Spring vs Java EE
| 特性 | Spring | Java EE |
|---|---|---|
| 学习曲线 | 平缓 | 陡峭 |
| 配置方式 | 灵活 | 复杂 |
| 社区活跃度 | 高 | 中 |
| 企业采用率 | 高 | 中 |
Spring Boot vs 传统Spring
| 特性 | Spring Boot | 传统Spring |
|---|---|---|
| 配置 | 自动配置 | 手动配置 |
| 依赖管理 | 起步依赖 | 手动管理 |
| 内嵌服务器 | 支持 | 不支持 |
| 开发效率 | 高 | 中 |
学习路线图
基础阶段
Java基础 → Servlet/JSP → Spring FrameworkJava基础
- 面向对象编程
- 集合框架
- 异常处理
- 泛型
- 注解
Web基础
- HTTP协议
- Servlet
- JSP(了解即可)
- Filter/Listener
Spring Framework
- IoC容器
- Bean管理
- AOP
- Spring MVC
- Spring JDBC
- 事务管理
进阶阶段
Spring Boot → Spring Data → Spring SecuritySpring Boot
- 自动配置原理
- 配置管理
- Web开发
- 数据访问
- 缓存
- 消息队列
Spring Data
- JPA
- MyBatis集成
- Redis
- MongoDB
Spring Security
- 认证
- 授权
- JWT
- OAuth2
高级阶段
Spring Cloud → 微服务架构 → 云原生Spring Cloud
- 服务注册发现
- 配置中心
- 服务调用
- 网关
- 断路器
微服务架构
- 服务拆分
- 分布式事务
- 链路追踪
- 容器化部署
云原生
- Kubernetes
- 服务网格
- CI/CD
推荐学习资源
官方文档
开发工具
- IntelliJ IDEA - 推荐的IDE
- Spring Tools Suite - Eclipse插件
- Spring Initializr - 项目生成器
社区资源
下一步
继续学习 Spring 7快速入门,开始动手实践。