Skip to content

Spring 概述与生态

一、Spring 是什么

Spring 是由 Rod Johnson 创建的开源 Java EE 框架,旨在解决企业级应用开发的复杂性。

核心理念:不去重新发明轮子,而是提供一种更好的方式来完成常见任务。

┌─────────────────────────────────────────────────────────┐
│                     Spring Framework                      │
├─────────────────────────────────────────────────────────┤
│  IoC Container  │  AOP  │  Events  │  i18n  │  Testing │
├─────────────────────────────────────────────────────────┤
│              Enterprise Integration                      │
│   WebSocket  │  Web-WS  │  Web  │  Webflux  │  Serial  │
└─────────────────────────────────────────────────────────┘

二、Spring 生态全家桶

项目作用地位
Spring Framework核心框架,IoC/AOP基础
Spring Boot快速开发、自动配置主流
Spring MVCWeb层处理Web基础
Spring Data统一数据访问数据层
Spring Security安全认证授权安全
Spring Cloud分布式微服务微服务
Spring Batch批处理批处理
Spring Integration企业集成模式ESB

三、Spring Framework 模块划分

spring-core (4MB)
├── spring-core.jar       # 核心工具类
├── spring-beans.jar      # BeanFactory
└── spring-context.jar    # ApplicationContext

AOP
├── spring-aop.jar        # AOP基础
└── spring-aspects.jar    # AspectJ集成

Data Access
├── spring-jdbc.jar       # JDBC封装
├── spring-tx.jar         # 事务管理
└── spring-orm.jar        # ORM框架集成

Web
├── spring-web.jar        # Servlet容器
├── spring-webmvc.jar    # MVC框架
└── spring-websocket.jar # WebSocket

Integration
├── spring-jms.jar       # 消息队列
└── spring-amqp.jar      # RabbitMQ

四、Spring 版本演进

版本时间重大特性
Spring 1.x2004XML配置、IoC、AOP
Spring 2.x2006自定义命名空间、JDBC增强
Spring 3.x2009Java Config、REST、MVC重写
Spring 4.x2013全面支持Java 8、Boot萌芽
Spring 5.x2017响应式编程、函数式风格、Kotlin
Spring 6.x2022Java 17+、Jakarta EE 9、AOT

五、为什么选择 Spring

1. 低侵入性

java
// Spring 不强制继承任何类
public class UserService {
    // 只需要声明依赖,通过注入获取
    private UserDao userDao;
    
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
}

2. 依赖注入(DI)

java
// 传统方式:自己管理依赖
UserService service = new UserService();
service.setUserDao(new UserDaoImpl());

// Spring方式:被动接收注入
@Service
public class UserService {
    @Autowired
    private UserDao userDao;  // Spring 自动注入
}

3. 面向切面编程(AOP)

java
// 事务管理、性能监控、日志记录
@Transactional
public void transfer(String from, String to, BigDecimal amount) {
    // 业务逻辑
    // Spring 自动管理事务
}

4. 统一的抽象层

java
// 数据库访问统一抽象
@Repository
public interface UserDao extends JpaRepository<User, Long> {
    List<User> findByName(String name);
}

// 缓存统一抽象
@Cacheable("users")
public User findById(Long id) {
    return userRepository.findById(id).orElse(null);
}

六、与其他框架对比

传统 JavaEE vs Spring

对比项传统 EJBSpring
事务管理容器管理,复杂声明式,简单
依赖获取JNDI 查找DI 注入
远程访问RMI 复杂简化封装
测试需要容器普通单元测试

Spring Boot vs Spring MVC

对比项Spring MVCSpring Boot
配置XML 大量配置自动配置
部署WAR 包JAR 内嵌容器
开发繁琐快速
监控手动Actuator

七、Spring 项目创建

Maven 依赖

xml
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>6.1.0</version>
</dependency>

传统方式创建 Bean

java
public class Main {
    public static void main(String[] args) {
        // 手动创建容器
        ClassPathXmlApplicationContext ctx = 
            new ClassPathXmlApplicationContext("applicationContext.xml");
        
        // 获取Bean
        UserService service = ctx.getBean("userService", UserService.class);
        service.doSomething();
        
        ctx.close();
    }
}

现代方式(推荐)

java
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

八、面试高频问题

Q1: Spring 是什么?有哪些主要模块?

Spring 是一个轻量级 Java 开发框架,主要模块:

  • Core: IoC/DI 容器
  • AOP: 面向切面编程
  • Data Access: JDBC/事务/ORM
  • Web: MVC/WebSocket
  • Integration: 消息/远程调用

Q2: Spring 和 Spring Boot 什么关系?

  • Spring 是一个整体框架
  • Spring Boot 是 Spring 的脚手架,约定优于配置
  • Boot 让 Spring 开发更简单,自动配置内嵌容器

Q3: Spring 6.x 有哪些新特性?

  • 最低支持 Java 17
  • 迁移到 Jakarta EE 9+(jakarta.* 命名空间)
  • 支持 GraalVM 原生镜像(AOT编译)
  • 增强响应式编程支持
  • 函数式编程增强

九、学习路线规划

第一阶段:Spring 基础(本章 + 后续3章)

第二阶段:Spring Boot 快速开发

第三阶段:Spring MVC Web 开发

第四阶段:Spring Data 数据访问

第五阶段:Spring Security 安全

第六阶段:Spring Cloud 微服务

第七阶段:Spring 高级(原理/源码)

下一章我们将深入学习 Spring 的核心概念:IoC 与 DI(控制反转与依赖注入)

基于 MIT 许可发布