为了账号安全,请及时绑定邮箱和手机立即绑定

SpringBoot框架教程:从入门到实践

标签:
SpringBoot
概述

本文提供了详细的Spring Boot框架教程,涵盖了从环境搭建到项目实战的全过程。文章深入介绍了Spring Boot的特点、优势以及核心概念,并通过示例代码演示了如何创建和运行第一个Spring Boot应用。此外,还详细讲解了常用配置文件的使用方法以及如何整合其他框架如MyBatis和Spring Security。

Spring Boot 简介

什么是 Spring Boot

Spring Boot 是基于 Spring 框架的一个开源项目,旨在简化 Spring 应用的初始搭建以及开发过程。通过约定优于配置的方式,Spring Boot 自动配置 Spring 应用,使得开发者无需手动配置大量的 XML 或注解。Spring Boot 主要用于快速构建独立的、生产级别的基于 Spring 框架的应用。

Spring Boot 的特点和优势

  1. 快速应用搭建:Spring Boot 可以快速搭建 Spring 应用,省去了大量的配置工作。
  2. 无需 XML 配置:Spring Boot 遵循约定优于配置的原则,大部分配置可以通过注解完成,极大地减少了 XML 配置的需求。
  3. 自动配置:Spring Boot 会根据应用的依赖自动配置 Spring 应用,简化了应用的配置过程。
  4. 嵌入式服务器:Spring Boot 可以内嵌 Tomcat、Jetty 或 Undertow Web 服务器,无需额外部署。
  5. 起步依赖:Spring Boot 提供了大量起步依赖,通过引入一个依赖即可快速引入所有需要的依赖,减少了手动配置依赖的工作量。
  6. 命令行界面:Spring Boot 提供了 Spring CLI 命令行工具,可以方便地运行和测试应用。
  7. 健康检查:Spring Boot 提供了默认的健康检查工具,可以方便地监控应用的运行状态。
  8. 外部配置:支持从环境变量、命令行参数或配置文件中读取配置,增强了应用的灵活性。
  9. 自动重启:Spring Boot 配合 Spring DevTools 实现了应用在开发过程中的自动重启,提高了开发效率。

Spring Boot 的核心概念

  • 自动配置:Spring Boot 通过 @SpringBootApplication 注解自动配置 Spring 应用,不需要手动配置。
  • 起步依赖:Spring Boot 提供了多种起步依赖,如 spring-boot-starter-web,引入后自动配置 Spring MVC。
  • 配置文件:Spring Boot 使用 application.propertiesapplication.yml 进行配置。
  • 命令行界面:Spring Boot 提供了 spring-boot:run 命令,可以直接运行应用。
  • 嵌入式 Web 服务器:Spring Boot 可以内嵌 Tomcat、Jetty 或 Undertow,构建独立的 Web 应用。
环境搭建

下载并安装 Java 开发环境

  1. 下载安装 Java SDK:访问 Oracle 官方网站或 AdoptOpenJDK 网站下载 Java SDK,选择适用于你的操作系统的版本。
  2. 环境变量配置:在终端或命令提示符中输入 java -version,检查是否安装成功。如果未安装成功,请设置环境变量。
    • Windows
      set JAVA_HOME=C:\Program Files\Java\jdk-11.0.1
      set PATH=%JAVA_HOME%\bin;%PATH%
    • Linux/macOS
      export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
      export PATH=$JAVA_HOME/bin:$PATH
  3. 验证安装:在命令行中输入 java -version,验证 Java 是否安装成功。

创建并配置 Spring Boot 项目

  1. 下载并安装 Spring Boot 工具:访问 Spring Initializr 网站或使用 Spring Tool Suite (STS) 创建 Spring Boot 项目。
  2. 创建项目:在 Spring Initializr 网站中选择所需依赖,如 Web 依赖、JPA 依赖等,生成项目。
  3. 导入项目:将生成的项目导入到 Eclipse 或 IntelliJ IDEA 中。
<!-- pom.xml 示例 -->
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
第一个 Spring Boot 应用

创建 Spring Boot 项目实例

  1. 创建 Spring Boot 工程:使用 Spring Initializr 或 Spring Boot CLI 创建一个新的 Spring Boot 项目。
  2. 选择依赖:选择所需的依赖,如 Web、JPA 等。
  3. 创建主类:创建主类 Application.java,用于启动 Spring Boot 应用。
// Application.java
package com.example.demo;

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

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

运行第一个 Spring Boot 应用

  1. 运行应用:使用 mvn spring-boot:run 命令运行应用,或者直接运行主类。
  2. 访问主页:默认情况下,Spring Boot 应用会在 http://localhost:8080 启动并运行。
mvn spring-boot:run
Spring Boot 常用配置

应用配置文件详解(application.properties/application.yml)

Spring Boot 使用 application.propertiesapplication.yml 文件进行配置。这些配置文件位于 src/main/resources 目录下,可以覆盖默认配置。

application.properties 示例

# application.properties
server.port=8081
spring.application.name=demo-app

application.yml 示例

# application.yml
server:
  port: 8081
spring:
  application:
    name: demo-app

自动配置原理

Spring Boot 通过 @SpringBootApplication 注解来启动应用。这个注解包含三个注解:@Configuration@EnableAutoConfiguration@ComponentScan

  • @Configuration:标记类为配置类,可以定义 Spring Bean。
  • @EnableAutoConfiguration:启用自动配置,根据类路径中的依赖关系自动配置 Spring 应用。
  • @ComponentScan:扫描指定包下的组件,以便注册为 Spring Bean。

自动配置的主要工作是在 spring.factories 文件中定义配置类,Spring Boot 会根据这些配置类对应用进行配置。

// ExampleAutoConfiguration.java
package com.example.demo.config;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableAutoConfiguration
public class ExampleAutoConfiguration {
    // 自动配置逻辑
}
Spring Boot 常用功能介绍

控制器(Controller)

控制器是处理 HTTP 请求的组件,通常使用 @Controller@RestController 注解。@RestController@Controller@ResponseBody 的组合,适用于 RESTful 风格的应用。

示例代码

// HelloController.java
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, Spring Boot!";
    }
}

服务层(Service)

服务层负责处理业务逻辑,通常使用 @Service 注解。服务层可以调用数据访问层(Repository)的方法来操作数据库。

示例代码

// UserService.java
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 createUser(User user) {
        return userRepository.save(user);
    }
}

数据访问层(Repository)

数据访问层负责操作数据库,通常使用 @Repository 注解。Spring Data JPA 提供了 JpaRepository 接口,可以简化数据库操作。

示例代码

// UserRepository.java
package com.example.demo.repository;

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

public interface UserRepository extends JpaRepository<User, Long> {
    User findByUsername(String username);
}
Spring Boot 项目实战

创建一个简单的 Web 应用

创建一个简单的 Web 应用,包含用户注册和登录功能。

示例代码

// UserController.java
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
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping("/register")
    public User registerUser(@RequestBody User user) {
        return userService.createUser(user);
    }

    @GetMapping("/login")
    public User loginUser(@RequestParam String username, @RequestParam String password) {
        return userService.findByUsernameAndPassword(username, password);
    }
}

示例服务层代码

// UserService.java
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 createUser(User user) {
        return userRepository.save(user);
    }

    public User findByUsernameAndPassword(String username, String password) {
        return userRepository.findByUsernameAndPassword(username, password);
    }
}

示例数据访问层代码

// UserRepository.java
package com.example.demo.repository;

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

public interface UserRepository extends JpaRepository<User, Long> {
    User findByUsernameAndPassword(String username, String password);
}

整合其他框架(如 MyBatis、Spring Security 等)

整合 MyBatis

  1. 添加依赖:在 pom.xml 中添加 MyBatis 和 MyBatis Spring Boot Starter 依赖。
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.3</version>
</dependency>
  1. 配置 MyBatis:创建 mybatis-config.xml 配置文件。
<!-- mybatis-config.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <typeAlias type="com.example.demo.model.User" alias="User"/>
    </typeAliases>
    <mappers>
        <mapper resource="com/example/demo/mapper/UserMapper.xml"/>
    </mappers>
</configuration>
  1. 编写 Mapper 文件:创建 UserMapper.xml 文件。
<!-- UserMapper.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">
    <select id="getUserById" resultType="User">
        SELECT * FROM users WHERE id = #{id}
    </select>
</mapper>

整合 Spring Security

  1. 添加依赖:在 pom.xml 中添加 Spring Security 依赖。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
  1. 配置 Spring Security:创建 SecurityConfig.java 配置文件。
// SecurityConfig.java
package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/admin/**").hasRole("ADMIN")
                .antMatchers("/user/**").hasRole("USER")
                .anyRequest().permitAll()
            .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
            .and()
            .logout()
                .permitAll();
    }

    @Bean
    public UserDetailsService userDetailsService() {
        // 实现用户服务
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消