继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

SpringBoot框架学习:从入门到实践指南

繁星点点滴滴
关注TA
已关注
手记 355
粉丝 67
获赞 333
概述

本文介绍了SpringBoot框架学习的全过程,从环境搭建到开发入门,再到实战演练,帮助开发者快速掌握SpringBoot的核心概念和开发技巧。文中详细讲解了SpringBoot的优势、自动配置机制以及如何创建第一个SpringBoot项目,并通过示例演示了如何开发用户管理系统。

SpringBoot框架学习:从入门到实践指南
SpringBoot简介

什么是SpringBoot

Spring Boot 是一个由 Spring 团队提供的框架,旨在简化新 Spring 应用程序的初始搭建及开发过程。它通过一套约定大于配置的方式,帮助开发者快速搭建独立运行的 Spring 应用程序。Spring Boot 可以用来创建独立的、生产级别的基于 Spring 框架的应用程序。

SpringBoot的优势

Spring Boot 的一些主要优势包括:

  1. 简化配置:Spring Boot 提供了默认配置,只需要少量配置就能快速启动应用。
  2. 自动配置:通过约定大于配置的思想,Spring Boot 能够自动根据类库依赖来配置应用。
  3. 打包独立应用:Spring Boot 可以将应用打包成一个可执行的 jar 或 war 文件,便于部署。
  4. 嵌入式容器:Spring Boot 可以与嵌入式的 Tomcat、Jetty 或者 Undertow 无缝集成。
  5. 全面支持微服务架构:包括配置中心、服务注册与发现、负载均衡、断路器、和链路追踪等。
  6. 快速集成第三方库:Spring Boot 通过自动配置和依赖管理,简化了与第三方库的集成。
  7. 健康监控:内置了健康检查功能,便于运维人员了解应用状态。

SpringBoot的核心概念

  1. @SpringBootApplication:这是一个复合注解,包含了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 三个注解,用于标记启动类。
  2. 启动类:启动类通常是一个简单的 Java 类,使用 @SpringBootApplication 注解标记,作为 Spring Boot 应用的入口点。
  3. 自动配置:Spring Boot 可以根据添加的依赖自动配置 Spring 应用。例如,添加 Spring Web 依赖会自动配置一个 Tomcat 服务器。
  4. 外部配置:Spring Boot 支持多种配置文件(如 application.propertiesapplication.yml),允许用户覆盖默认配置。
开发环境搭建

下载并安装Java开发工具

首先,确保你的计算机上已经安装了 Java 开发工具。你可以从 Oracle 官方网站下载 Java SE Development Kit (JDK) 的最新版本,并按照安装向导进行安装。安装完成后,可以通过命令行验证 Java 版本:

java -version

配置IDE(如IntelliJ IDEA或Spring Tool Suite)

安装完 JDK 后,接下来需要配置一个合适的集成开发环境 (IDE)。这里推荐 IntelliJ IDEA,因为它对 Spring Boot 有很好的支持,包括自动补全和代码分析等功能。

  1. 下载并安装 IntelliJ IDEA
    访问 IntelliJ IDEA 的官方网站下载最新版本,并按照安装向导进行安装。

  2. 安装 Spring Boot 插件
    打开 IntelliJ IDEA,进入 File -> Settings -> Plugins,搜索 Spring Boot 插件并安装。

创建第一个SpringBoot项目

在 IntelliJ IDEA 中创建一个新的 Spring Boot 项目,步骤如下:

  1. 打开 IntelliJ IDEA,选择 File -> New -> Project
  2. 在新窗口中选择 Spring Initializr,点击 Next
  3. 输入项目名,选择语言 (Java),选择 Spring Boot 的版本。
  4. Dependencies 选项卡中添加需要的依赖(例如 Spring WebSpring Data JPA)。
  5. 点击 Finish,IntelliJ IDEA 会自动下载依赖并创建项目结构。

创建完成后,项目目录结构如下:

src
├── main
│   ├── java
│   │   └── com
│   │       └── example
│   │           └── demo
│   │               ├── DemoApplication.java
│   │               └── controller
│   │                   └── HelloController.java
│   └── resources
│       └── application.properties
Hello World应用

使用SpringBoot创建简单的Hello World项目

  1. 创建一个简单的控制器类 HelloController.java,并添加 @RestController@RequestMapping 注解。
package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, World!";
    }
}
  1. DemoApplication.java 启动类中,使用 @SpringBootApplication 注解标记类,并添加 main 方法。
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

运行和测试项目

  1. 在 IntelliJ IDEA 中运行 DemoApplication 类的 main 方法。
  2. 打开浏览器,访问 http://localhost:8080/hello,页面上将显示 "Hello, World!"。
SpringBoot常用注解介绍

@SpringBootApplication

@SpringBootApplication 是一个组合注解,包含了以下三个注解:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication {
    // 具体内容省略
}
  1. @SpringBootConfiguration:相当于 @Configuration,用于标记配置类。
  2. @EnableAutoConfiguration:用于启用自动配置。
  3. @ComponentScan:用于扫描并注册组件类。

@Controller, @Service, @Repository, @Component

这些注解用于定义不同的组件类型:

  1. @Controller:用于标记控制器类。
  2. @Service:用于标记服务层类。
  3. @Repository:用于标记数据访问层类。
  4. @Component:通用注解,用于定义一个组件。

示例代码

package com.example.demo.service;

import org.springframework.stereotype.Service;

@Service
public class UserService {

    public void addUser(String name, String email) {
        // 添加用户逻辑
    }
}

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/users")
public class UserController {

    @GetMapping("/add")
    public String addUser() {
        // 添加用户逻辑
        return "addUserView";
    }
}

package com.example.demo.repository;

import org.springframework.stereotype.Repository;

@Repository
public class UserRepository {

    public void addUser(String name, String email) {
        // 添加用户逻辑
    }
}

@RequestMapping, @GetMapping, @PostMapping

这些注解用于定义 RESTful API:

  1. @RequestMapping:用于映射所有请求到处理程序类和处理程序方法。
  2. @GetMapping:用于映射 HTTP GET 请求。
  3. @PostMapping:用于映射 HTTP POST 请求。

示例代码

package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class ApiController {

    @GetMapping("/greet")
    public String greet() {
        return "Hello, API!";
    }
}
实战演练:创建用户管理系统

设计用户管理的基本功能

用户管理系统的基本功能包括:

  1. 用户添加:将一个新用户添加到用户表中。
  2. 用户查询:根据用户 ID 查询用户信息。
  3. 用户删除:根据用户 ID 删除用户信息。
  4. 用户更新:根据用户 ID 更新用户信息。

实现用户添加、查询和删除操作

  1. 创建实体类:定义一个 User 实体类。
package com.example.demo.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
    private String email;

    // 省略 getter 和 setter 方法
}
  1. 创建数据访问层
package com.example.demo.repository;

import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    User findByName(String name);
}
  1. 创建服务层
package com.example.demo.service;

import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public User saveUser(User user) {
        return userRepository.save(user);
    }

    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
}
  1. 创建控制器层
package com.example.demo.controller;

import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping
    public User createUser(@RequestBody User user) {
        return userService.saveUser(user);
    }

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
    }
}

使用Thymeleaf进行前端页面渲染

  1. 添加依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
  1. 创建前端页面:在 src/main/resources/templates 目录下创建 user.html 文件。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>User Management</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
</head>
<body>
<div class="container">
    <h1>User Management</h1>
    <form th:action="@{/users}" method="post">
        <input type="text" name="name" placeholder="Name"/>
        <input type="email" name="email" placeholder="Email"/>
        <button type="submit">Save User</button>
    </form>
</body>
</html>
  1. 使用 Thymeleaf 渲染页面
package com.example.demo.controller;

import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {

    @Autowired
    private UserService userService;

    @GetMapping("/")
    public String home(Model model) {
        model.addAttribute("users", userService.findAll());
        return "user";
    }
}
配置与自定义

如何使用application.properties和application.yml进行配置

Spring Boot 使用 application.propertiesapplication.yml 文件来配置应用,这些文件通常位于 src/main/resources 目录下。

  1. 基本配置
# application.properties
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root
  1. YAML 配置
# application.yml
server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: root

动态配置与环境变量使用

通过环境变量可以动态修改配置文件中的属性值,例如:

  1. 设置环境变量
export SPRING_DATASOURCE_URL=jdbc:mysql://newurl:3306/newdb
  1. 配置文件中使用占位符
spring.datasource.url=${SPRING_DATASOURCE_URL}

自定义starter

自定义 Spring Boot Starter 可以简化依赖管理和配置。创建一个新的 Maven 项目,然后添加必要的依赖和配置。

  1. 创建 Maven 项目
<project>
    <groupId>com.example</groupId>
    <artifactId>my-starter</artifactId>
    <version>1.0.0</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    </dependencies>
</project>
  1. 创建配置类
package com.example.starter;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableConfigurationProperties
public class MyStarterConfig {

    @ConfigurationProperties(prefix = "my")
    public static class MyProperties {
        private String prefix;
        // 省略 getter 和 setter 方法
    }
}
  1. 创建依赖管理
<project>
    <groupId>com.example</groupId>
    <artifactId>my-starter-dependencies</artifactId>
    <version>1.0.0</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.example</groupId>
                <artifactId>my-starter</artifactId>
                <version>1.0.0</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>
  1. 在主应用中使用自定义 Starter
<dependency>
    <groupId>com.example</groupId>
    <artifactId>my-starter</artifactId>
    <version>1.0.0</version>
</dependency>

通过这些步骤,你可以创建一个自定义的 Spring Boot Starter,方便地在多个项目中复用配置和依赖。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP