Skip to content

Spring框架简介

Spring发展历史

版本演进

版本发布时间重要特性
Spring 1.02004年IoC容器、AOP
Spring 2.02006年XML配置简化、命名空间
Spring 3.02009年Java配置、REST支持
Spring 4.02013年Java 8支持、WebSocket
Spring 5.02017年响应式编程、Kotlin支持
Spring 6.02022年Jakarta EE 9、Java 17
Spring 7.02025年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 6Spring 7
Java17+17+(推荐21/25)
Jakarta EE9+11
Tomcat10+11+
Jetty11+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

特性SpringJava EE
学习曲线平缓陡峭
配置方式灵活复杂
社区活跃度
企业采用率

Spring Boot vs 传统Spring

特性Spring Boot传统Spring
配置自动配置手动配置
依赖管理起步依赖手动管理
内嵌服务器支持不支持
开发效率

学习路线图

基础阶段

Java基础 → Servlet/JSP → Spring Framework
  1. Java基础

    • 面向对象编程
    • 集合框架
    • 异常处理
    • 泛型
    • 注解
  2. Web基础

    • HTTP协议
    • Servlet
    • JSP(了解即可)
    • Filter/Listener
  3. Spring Framework

    • IoC容器
    • Bean管理
    • AOP
    • Spring MVC
    • Spring JDBC
    • 事务管理

进阶阶段

Spring Boot → Spring Data → Spring Security
  1. Spring Boot

    • 自动配置原理
    • 配置管理
    • Web开发
    • 数据访问
    • 缓存
    • 消息队列
  2. Spring Data

    • JPA
    • MyBatis集成
    • Redis
    • MongoDB
  3. Spring Security

    • 认证
    • 授权
    • JWT
    • OAuth2

高级阶段

Spring Cloud → 微服务架构 → 云原生
  1. Spring Cloud

    • 服务注册发现
    • 配置中心
    • 服务调用
    • 网关
    • 断路器
  2. 微服务架构

    • 服务拆分
    • 分布式事务
    • 链路追踪
    • 容器化部署
  3. 云原生

    • Kubernetes
    • 服务网格
    • CI/CD

推荐学习资源

官方文档

开发工具

  • IntelliJ IDEA - 推荐的IDE
  • Spring Tools Suite - Eclipse插件
  • Spring Initializr - 项目生成器

社区资源

下一步

继续学习 Spring 7快速入门,开始动手实践。