杰瑞科技汇

java spring教程

Java Spring 全栈教程:从入门到精通

目录

  1. 什么是 Spring? - 核心概念与价值
  2. 为什么学习 Spring? - Spring 的优势与生态
  3. Spring 生态系统概览 - 核心模块介绍
  4. 环境准备 - JDK, IDE, Maven/Gradle
  5. Spring 核心思想:IoC 和 DI
    • 1. 控制反转
    • 2. 依赖注入
    • 3. 使用 @Component@Autowired 实现简单的 DI
  6. Spring 框架进阶
    • 1. Spring 配置方式
      • XML 配置 (传统方式)
      • Java 配置 (推荐方式)
      • 注解配置
    • 2. Bean 的生命周期与作用域
  7. Web 开发入门:Spring MVC
    • 1. 创建第一个 Spring MVC 项目
    • 2. 核心组件:DispatcherServlet, @Controller, @RequestMapping
    • 3. 处理请求参数和返回 JSON 数据 (@ResponseBody)
  8. 数据持久化:Spring Data JPA / MyBatis
    • 1. 整合 Spring Data JPA (简化数据库操作)
    • 2. 整合 MyBatis (更灵活的 SQL 控制)
  9. 项目实战:构建一个简单的 RESTful API
    • 1. 需求分析
    • 2. 项目搭建与依赖引入
    • 3. 分层实现 (Entity, Repository, Service, Controller)
    • 4. 测试与运行
  10. Spring Boot:现代化的 Spring 开发方式
    • 1. 什么是 Spring Boot?
    • 2. Spring Boot 的核心特性:自动配置、起步依赖
    • 3. 使用 Spring Initializr 创建项目
    • 4. Spring Boot 与 Spring MVC 的关系
  11. 学习路径与进阶方向
    • 1. 基础巩固
    • 2. 进阶技术
    • 3. 企业级应用
    • 4. 微服务架构
  12. 推荐资源

什么是 Spring?

Spring 是一个开源的、轻量级的 控制反转面向切面编程 的容器框架,它最初由 Rod Johnson 创建,旨在解决企业级应用开发的复杂性。

java spring教程-图1
(图片来源网络,侵删)

Spring 就像一个大工厂管家,你只需要告诉它你需要什么(比如数据库连接、一个服务对象),它就会帮你创建和管理好这些对象,并在你需要的时候“注入”到你的代码中。

为什么学习 Spring?

  • 简化开发:通过 IoC 和 AOP,Spring 将我们从复杂的事务管理、JDBC 连接等底层代码中解放出来。
  • 模块化设计:Spring 框架由多个模块组成,你可以根据自己的需求选择使用,非常灵活。
  • 强大的生态:围绕 Spring 形成了一个庞大的生态系统,几乎涵盖了所有现代 Java 开发的方方面面,如 Spring MVC (Web)、Spring Data (数据库)、Spring Security (安全)、Spring Boot (快速开发) 等。
  • 社区活跃,文档完善:作为 Java 领域最流行的框架,Spring 拥有全球最大的开发者社区和海量的学习资源。
  • 行业标准:掌握 Spring 是成为一名合格 Java 后端开发者的必备技能。

Spring 生态系统概览

了解 Spring 的核心模块有助于你系统地学习:

模块 描述
Spring Core 核心容器,提供 IoC 和 DI 功能,是整个 Spring 框架的基础。
Spring MVC 用于构建 Web 应用和 RESTful API 的模块,基于 MVC 设计模式。
Spring Data 一个伞形项目,旨在简化数据库访问,它支持 JPA, MongoDB, Redis, Elasticsearch 等。
Spring Security 提供身份认证和授权功能,保护你的应用安全。
Spring Boot 不是 Spring 的替代品,而是其“超集”,它通过“约定优于配置”的理念,极大地简化了 Spring 应用的初始搭建和开发过程。
Spring AOP 面向切面编程,用于处理日志、事务、安全等横切关注点。
Spring Transaction 提供声明式和编程式的事务管理。

环境准备

在开始之前,确保你已经安装了:

  1. JDK (Java Development Kit): 推荐版本 JDK 8 或更高版本 (如 JDK 11, 17)。
  2. IDE (集成开发环境): IntelliJ IDEA (强烈推荐,对 Spring 支持极佳) 或 Eclipse。
  3. 构建工具: MavenGradle,Maven 更为传统和普遍,Gradle 在构建速度和灵活性上更优,本教程将以 Maven 为例。

Spring 核心思想:IoC 和 DI

这是 Spring 的灵魂,必须理解透彻。

java spring教程-图2
(图片来源网络,侵删)

1. 控制反转

传统编程:你的代码主动创建和管理依赖对象,在 UserService 中,你需要 new UserDao() 来创建数据访问对象。

public class UserService {
    private UserDao userDao = new UserDao(); // 主动创建依赖
    public void addUser(User user) {
        userDao.save(user);
    }
}

IoC 思想:创建和管理对象的权利(控制权)从你的代码转移到了 Spring 容器(IoC 容器),你不再 new 对象,而是告诉容器“我需要一个 UserDao”,容器会负责创建并“注入”给你。

2. 依赖注入

DI 是实现 IoC 的一种具体方式,即由外部(Spring 容器)来决定将哪个依赖(对象)“注入”到当前对象中。

主要有两种注入方式:

  • 构造器注入 (推荐):通过构造函数注入依赖,确保对象在创建时就是完整的。
  • Setter 注入:通过 set 方法注入依赖。

3. 使用 @Component@Autowired 实现简单的 DI

让我们通过一个简单的例子来感受一下。

步骤 1:创建 Maven 项目,引入 Spring Core 依赖pom.xml 中添加:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.23</version> <!-- 使用一个稳定版本 -->
    </dependency>
</dependencies>

步骤 2:创建一个普通的 Java 类(Bean) 使用 @Component 注解告诉 Spring:“我是一个需要被你管理的 Bean”。

// UserDao.java
package com.example.demo;
import org.springframework.stereotype.Component;
@Component
public class UserDao {
    public void save() {
        System.out.println("User data is saved to the database!");
    }
}

步骤 3:创建一个需要依赖的类

// UserService.java
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class UserService {
    // 1. 定义一个依赖
    private final UserDao userDao;
    // 2. 使用 @Autowired 进行构造器注入
    // Spring 会自动找到 UserDao 类型的 Bean 并通过这个构造器注入
    @Autowired
    public UserService(UserDao userDao) {
        this.userDao = userDao;
    }
    public void addUser() {
        System.out.println("UserService is calling UserDao...");
        userDao.save(); // 调用依赖对象的方法
    }
}

步骤 4:启动 Spring 容器并测试

// MainApplication.java
package com.example.demo;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MainApplication {
    public static void main(String[] args) {
        // 1. 创建 Spring 容器
        // AnnotationConfigApplicationContext 是一个基于注解的配置上下文
        AnnotationConfigApplicationContext context = 
            new AnnotationConfigApplicationContext("com.example.demo");
        // 2. 从容器中获取 Bean
        UserService userService = context.getBean(UserService.class);
        // 3. 使用 Bean
        userService.addUser();
        // 4. 关闭容器
        context.close();
    }
}

运行 MainApplication,你将看到控制台输出:

UserService is calling UserDao...
User data is saved to the database!

这就是最简单的 Spring 应用!你没有 new 任何对象,但 UserService 却成功使用了 UserDao,这就是 IoC 和 DI 的魔力。

Spring 框架进阶

1. Spring 配置方式

  • XML 配置:早期的配置方式,通过 applicationContext.xml 文件来定义 Bean 和依赖关系,现在基本不用于新项目。
  • Java 配置 (推荐):使用 @Configuration@Bean 注解来在 Java 类中定义配置,这是现代 Spring 开发的标准方式。
    @Configuration
    public class AppConfig {
        @Bean
        public UserDao userDao() {
            return new UserDao();
        }
    }
  • 注解配置:大量使用 @Component, @Service, @Repository, @Autowired 等注解,让 Spring 自动扫描并管理 Bean。

2. Bean 的生命周期与作用域

  • 生命周期:Bean 从创建到销毁的整个过程,包括实例化、属性填充、初始化、使用、销毁等,可以通过 @PostConstruct@PreDestroy 注解来定义初始化和销毁方法。
  • 作用域
    • singleton (默认):整个 Spring 容器中只有一个 Bean 实例。
    • prototype:每次请求都会创建一个新的 Bean 实例。

Web 开发入门:Spring MVC

Spring MVC 是基于 Servlet 的一个 Web 框架,它将 Web 层的职责清晰地分离开。

1. 创建第一个 Spring MVC 项目

pom.xml 中添加 spring-webmvc 依赖。

2. 核心组件

  1. DispatcherServlet:前端控制器,是整个 Spring MVC 的入口,所有请求都先经过它,再由它分发给具体的处理器。
  2. @Controller:标注一个类为控制器,用于处理用户请求。
  3. @RequestMapping:映射一个 HTTP 请求到一个处理方法上,可以类上和方法上使用。

3. 示例:返回 JSON 数据

// UserController.java
@Controller
@RequestMapping("/api/users")
public class UserController {
    @GetMapping("/{id}")
    @ResponseBody // 告诉 Spring MVC 直接返回方法的返回值作为响应体,而不是解析为视图名
    public User getUserById(@PathVariable("id") Long id) {
        // 实际项目中,这里会调用 Service 层获取数据
        User user = new User();
        user.setId(id);
        user.setName("John Doe");
        return user;
    }
}

当你访问 http://localhost:8080/your-app/api/users/1 时,浏览器会直接收到 JSON 格式的数据:{"id":1,"name":"John Doe"}

数据持久化:Spring Data JPA / MyBatis

Web 应用离不开数据库操作。

1. 整合 Spring Data JPA (简化数据库操作)

Spring Data JPA 让你无需编写 DAO/Repository 的实现类,只需定义一个接口并继承 JpaRepository,Spring 就会自动为你实现 CRUD(增删改查)方法。

步骤

  1. 添加依赖:spring-boot-starter-data-jpa, mysql-connector-java
  2. 配置数据库连接信息。
  3. 创建实体类 @Entity
  4. 创建 Repository 接口并继承 JpaRepository
    public interface UserRepository extends JpaRepository<User, Long> {
        // 你可以在这里定义自定义查询方法,Spring 会自动实现
        List<User> findByName(String name);
    }

2. 整合 MyBatis (更灵活的 SQL 控制)

MyBatis 允许你编写原生的 SQL 语句,对于复杂的查询或需要优化 SQL 性能的场景非常有用。

步骤

  1. 添加依赖:mybatis-spring-boot-starter, mysql-connector-java
  2. 配置 MyBatis。
  3. 创建 Mapper 接口。
  4. 编写 XML 映射文件,将 SQL 与 Mapper 接口绑定。

项目实战:构建一个简单的 RESTful API

结合以上知识,我们可以构建一个完整的 CRUD 应用。

  • 目标:创建一个管理用户信息的 RESTful API。
  • 技术栈:Spring MVC + Spring Data JPA + MySQL。
  • 实现步骤
    1. 创建 Maven 项目,引入 spring-webmvc, spring-data-jpa, mysql-connector-java 等依赖。
    2. 配置 application.properties 文件,设置数据库连接。
    3. Entity 层:创建 User.java 实体类。
    4. Repository 层:创建 UserRepository.java 接口。
    5. Service 层:创建 UserService.javaUserServiceImpl.java 处理业务逻辑。
    6. Controller 层:创建 UserController.java,提供 /api/users 的增删改查接口。
    7. 使用 Postman 或 curl 测试你的 API。

这个项目会让你对 Spring 的分层架构有非常直观的理解。

Spring Boot:现代化的 Spring 开发方式

当你掌握了传统的 Spring 开发后,你会发现配置非常繁琐,Spring Boot 就是为了解决这个问题而生的。

1. 什么是 Spring Boot?

Spring Boot 不是一个新的框架,它是一个快速构建 Spring 应用的工具,它通过“起步依赖”(Starter Dependencies)和“自动配置”(Auto-configuration)来简化项目搭建。

2. Spring Boot 的核心特性

  • 起步依赖:将相关的依赖打包在一起,你只需要引入一个 spring-boot-starter-web,它就会自动帮你引入 Tomcat、Spring MVC 等所有相关依赖。
  • 自动配置:根据你项目中引入的依赖,Spring Boot 会自动为你配置好 Bean,你引入了 spring-boot-starter-data-jpa 和 MySQL 驱动,它就会自动配置好数据源和 JPA。
  • 内嵌服务器:无需部署外部 Tomcat,可以直接将应用打包成一个可执行的 JAR 文件运行。

3. 使用 Spring Initializr 创建项目

访问 start.spring.io,这是最简单的 Spring Boot 项目创建方式。

  • Project: Maven Project
  • Language: Java
  • Spring Boot: 选择一个稳定版本 (如 2.7.x 或 3.x.x)
  • Project Metadata: 填写 Group, Artifact, Name 等。
  • Dependencies: 添加你需要的依赖,如 Spring Web, Spring Data JPA, MySQL Driver
  • 点击 "GENERATE" 下载项目压缩包,然后用你的 IDE 打开。

4. Spring Boot 与 Spring MVC 的关系

Spring Boot 包含了 Spring MVC,当你使用 Spring Boot 时,你实际上是在使用 Spring MVC,但所有繁琐的配置都由 Spring Boot 自动完成了,你只需要专注于编写业务代码。

学习路径与进阶方向

  1. 基础巩固

    • 熟练掌握 IoC/DI、AOP 的核心思想。
    • 理解 Spring MVC 的工作流程。
    • 熟练使用 Spring Data JPA 进行数据库操作。
    • 学会编写单元测试和集成测试(使用 JUnit, Mockito)。
  2. 进阶技术

    • Spring Boot 深入:自定义 Starter、自动配置原理、Actuator 健康检查。
    • Spring Security:学习如何为你的应用添加认证和授权功能。
    • Spring Transaction:深入理解事务传播机制和隔离级别。
    • Spring Cache:集成缓存(如 Redis, Ehcache)提升性能。
  3. 企业级应用

    • Spring Cloud:这是构建微服务架构的完整解决方案,学习其中的核心组件,如:
      • Nacos / Eureka: 服务注册与发现
      • Gateway: API 网关
      • OpenFeign: 声明式服务调用
      • Sentinel / Hystrix: 服务熔断与限流
      • Seata: 分布式事务
  4. 微服务架构

    • 将单体应用拆分为多个独立的微服务。
    • 学习服务间通信(REST, gRPC)、分布式配置、链路追踪等。

推荐资源

  • 官方文档Spring Framework Reference DocumentationSpring Boot Reference Documentation这是最权威、最准确的学习资料。
  • 书籍
    • 《Spring in Action》(Spring 实战):非常经典的入门书籍,讲解深入浅出。
    • 《Spring Boot in Action》(Spring Boot 实战):学习 Spring Boot 的不二之选。
  • 视频教程
    • Bilibili:搜索“尚硅谷 Spring”、“黑马程序员 Spring”等,有大量免费且优质的中文视频教程。
    • Udemy:国际知名的在线课程平台,有许多高质量的英文课程。
  • 实践平台
    • GitHub: 阅读优秀开源项目的源码。
    • 自己动手:尝试构建一些小项目,如博客系统、电商后台、在线论坛等。

也是最重要的:多写代码,多思考,多调试。 Spring 的体系虽然庞大,但核心思想是统一的,从基础开始,一步一个脚印,你一定能掌握它,祝你学习愉快!

分享:
扫描分享到社交APP
上一篇
下一篇