一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

SpringBoot入门实践:学习笔记与项目案例

时间:2026-05-31 14:15:01 编辑:袖梨 来源:一聚教程网

Spring Boot作为现代Java开发的标杆框架,通过约定优于配置的理念大幅简化了企业级应用搭建流程。本教程将系统讲解其核心特性、实战项目开发及主流技术整合,带您从零构建高效后端服务。

1、什么是Spring boot

Spring Boot 是基于Spring的快速开发框架,采用"自动配置"和"约定优于配置"的设计理念,将传统Spring项目简化为开箱即用的形式。它内置服务器、自动依赖管理等特性,开发者无需编写大量XML或繁琐配置,即可快速搭建并运行Web服务等后端应用。

起步依赖(Starter)是该框架的重要特性,它将某一类常用功能所需的所有依赖预先打包配置好,开发者只需引入一个依赖即可。


<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
dependency>

自动配置机制遵循约定优于配置原则,在应用启动时自动将所需Bean注入IOC容器,无需手动声明,极大简化开发流程。

什么是微服务

微服务架构将单体应用拆分为多个小型独立服务,每个服务专注单一业务功能(如用户、订单、支付),通过HTTP API进行通信。这种架构的优势在于各服务可独立开发部署,提升系统灵活性和可维护性,但也增加了服务间通信和运维复杂度。

2、第一个SpringBoot项目

1、快速上手

通过start.spring.io/可快速构建项目,IDEA内置该功能并支持切换为国内镜像start.aliyun.com。

启动类运行后,若失败需检查是否添加web-starter依赖,建议不指定版本让Spring自动选择。

控制器类需与启动类同级包,因Spring Boot默认扫描启动类所在包及其子包。

通过以下操作可将应用打包为可执行JAR:

2、配置

1、properties和pom.xml

# 端口配置
server.port=8081
# 应用名称
spring.application.name=demo
# 数据库连接
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
# 日志级别
logging.level.root=INFO
logging.level.com.zhang=DEBUG

在资源目录下添加banner.txt可自定义启动图案:

推荐使用bootschool.net/ascii获取ASCII艺术字:


 ████        █████        ████████     █████ █████  
░░███      ███░░░███     ███░░░░███   ░░███ ░░███   
 ░███     ███   ░░███   ░░░    ░███    ░███  ░███ █ 
 ░███    ░███    ░███      ███████     ░███████████ 
 ░███    ░███    ░███     ███░░░░      ░░░░░░░███░█ 
 ░███    ░░███   ███     ███      █          ░███░  
 █████    ░░░█████░     ░██████████          █████  
░░░░░       ░░░░░░      ░░░░░░░░░░          ░░░░░   
                                                    
                         大吉大利            永无BUG  

2、原理:自动配置类比外卖套餐

引入starter依赖如同点套餐,Spring Boot启动时会从"菜单清单"(自动配置类列表)查找所需组件(如Tomcat、Spring MVC等),根据当前环境条件自动创建并注入容器。

实现机制:

  1. 基于@EnableAutoConfiguration实现
  2. 通过AutoConfigurationImportSelector读取自动配置类
  3. 根据@Conditional系列条件注解按需注册Bean

3、自定义starter开发

实际开发中常需封装公共组件为starter供各团队使用。

1、自动配置依赖

自动配置模块需包含技术实现类及对应依赖:

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starterartifactId>
    <version>4.0.6version>
dependency>
<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-jdbcartifactId>
    <version>4.0.6version>
    <scope>compilescope>
dependency>
2、编写自动配置类
package com.zhang.config;

@AutoConfiguration
public class MyBatisAutoConfig {
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource) {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean;
    }
    
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(BeanFactory beanFactory) {
        MapperScannerConfigurer configurer = new MapperScannerConfigurer();
        configurer.setBasePackage(AutoConfigurationPackages.get(beanFactory).get(0));
        configurer.setAnnotationClass(Mapper.class);
        return configurer;
    }
}

创建AutoConfiguration.imports文件声明自动配置类:

3、编写starter模块

starter模块仅需引入autoconfigure依赖:

4、测试验证

替换官方mybatis-starter验证自定义starter:

4、yml配置

Spring Boot支持两种配置文件格式:

  • application.properties - key=value格式
  • application.yml - 层级结构,更简洁直观

YAML优势在于更清晰的层级表达,推荐使用:

server:
  port: 8080

student:
  name: qinjiang
  age: 3

pets:
  - cat
  - dog
2、实体类注入

通过@ConfigurationProperties实现配置到对象的映射:

3、JSR303校验

使用@Validated注解配合校验注解确保数据合规:

校验类型 注解 示例
非空校验 @NotNull, @NotEmpty, @NotBlank @NotBlank String name
数值范围 @Min, @Max @Min(18) int age
格式校验 @Email, @Pattern @Email String email
4、多环境配置

通过profile实现环境隔离:

spring:
  profiles:
    active: dev

推荐多文件方式管理环境配置:

application-dev.yml
application-prod.yml

3、整合MyBatis

1、依赖与配置

<dependency>
    <groupId>org.mybatis.spring.bootgroupId>
    <artifactId>mybatis-spring-boot-starterartifactId>
    <version>4.0.1version>
dependency>
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis
    username: root
    password: 123456

2、业务实现

完整的三层架构示例:

// Mapper层
@Mapper
public interface UserMapper {
    @Select("select * from user where id = #{id}")
    User getUserById(int id);
}

// Service层
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    
    public User getUserById(int id) {
        return userMapper.getUserById(id);
    }
}

// Controller层
@RestController
public class UserController {
    @Autowired
    private UserServiceImpl userService;
    
    @GetMapping("/findById")
    public User findById(Integer id) {
        return userService.getUserById(id);
    }
}

4、安全认证

1、JWT令牌

引入java-jwt实现令牌机制:

<dependency>
    <groupId>com.auth0groupId>
    <artifactId>java-jwtartifactId>
    <version>4.5.0version>
dependency>

2、登录实现

@PostMapping("/login")
public Result login(String username, String password) {
    User user = userService.findByUsername(username);
    if(user == null) {
        return Result.error("用户不存在");
    }
    
    if(!MD5Util.md5(password).equals(user.getPassword())) {
        return Result.error("密码错误");
    }
    
    Map<String, Object> claims = new HashMap<>();
    claims.put("id", user.getId());
    claims.put("username", username);
    String token = JwtUtil.genToken(claims);
    
    return Result.success(token);
}

3、拦截器验证

@Component
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        String token = request.getHeader("Authorization");
        try {
            JwtUtil.parseToken(token);
            return true;
        } catch (Exception e) {
            response.setStatus(401);
            return false;
        }
    }
}

5、Redis集成

引入Spring Data Redis实现令牌管理:

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-data-redisartifactId>
dependency>
spring:
  redis:
    host: localhost
    port: 6379

登录时存储令牌:

@Autowired
private StringRedisTemplate redisTemplate;

@PostMapping("/login")
public Result login(String username, String password) {
    // ...验证逻辑...
    
    String token = JwtUtil.genToken(claims);
    redisTemplate.opsForValue().set(token, token, 12, TimeUnit.HOURS);
    
    return Result.success(token);
}

6、文件上传

使用MultipartFile处理文件上传:

@PostMapping("/upload")
public Result upload(MultipartFile file) throws IOException {
    String filename = UUID.randomUUID() + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
    file.transferTo(new File("uploads", filename));
    return Result.success(filename);
}

7、分页查询

使用PageHelper实现分页:

@GetMapping
public Result> list(Integer pageNum, Integer pageSize) {
    PageHelper.startPage(pageNum, pageSize);
    List
articles = articleMapper.list(); Page
page = (Page
) articles; PageBean
pageBean = new PageBean<>(); pageBean.setTotal(page.getTotal()); pageBean.setItems(page.getResult()); return Result.success(pageBean); }

本教程系统讲解了Spring Boot核心功能及企业级应用开发全流程,从基础配置到安全认证,从数据持久化到文件处理,帮助开发者快速掌握现代Java后端开发关键技术栈。通过完整项目实战,您将具备独立开发企业级应用的能力。

热门栏目