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 的特点和优势
- 快速应用搭建:Spring Boot 可以快速搭建 Spring 应用,省去了大量的配置工作。
- 无需 XML 配置:Spring Boot 遵循约定优于配置的原则,大部分配置可以通过注解完成,极大地减少了 XML 配置的需求。
- 自动配置:Spring Boot 会根据应用的依赖自动配置 Spring 应用,简化了应用的配置过程。
- 嵌入式服务器:Spring Boot 可以内嵌 Tomcat、Jetty 或 Undertow Web 服务器,无需额外部署。
- 起步依赖:Spring Boot 提供了大量起步依赖,通过引入一个依赖即可快速引入所有需要的依赖,减少了手动配置依赖的工作量。
- 命令行界面:Spring Boot 提供了 Spring CLI 命令行工具,可以方便地运行和测试应用。
- 健康检查:Spring Boot 提供了默认的健康检查工具,可以方便地监控应用的运行状态。
- 外部配置:支持从环境变量、命令行参数或配置文件中读取配置,增强了应用的灵活性。
- 自动重启:Spring Boot 配合 Spring DevTools 实现了应用在开发过程中的自动重启,提高了开发效率。
Spring Boot 的核心概念
- 自动配置:Spring Boot 通过
@SpringBootApplication
注解自动配置 Spring 应用,不需要手动配置。 - 起步依赖:Spring Boot 提供了多种起步依赖,如
spring-boot-starter-web
,引入后自动配置 Spring MVC。 - 配置文件:Spring Boot 使用
application.properties
或application.yml
进行配置。 - 命令行界面:Spring Boot 提供了
spring-boot:run
命令,可以直接运行应用。 - 嵌入式 Web 服务器:Spring Boot 可以内嵌 Tomcat、Jetty 或 Undertow,构建独立的 Web 应用。
下载并安装 Java 开发环境
- 下载安装 Java SDK:访问 Oracle 官方网站或 AdoptOpenJDK 网站下载 Java SDK,选择适用于你的操作系统的版本。
- 环境变量配置:在终端或命令提示符中输入
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
- Windows:
- 验证安装:在命令行中输入
java -version
,验证 Java 是否安装成功。
创建并配置 Spring Boot 项目
- 下载并安装 Spring Boot 工具:访问 Spring Initializr 网站或使用 Spring Tool Suite (STS) 创建 Spring Boot 项目。
- 创建项目:在 Spring Initializr 网站中选择所需依赖,如 Web 依赖、JPA 依赖等,生成项目。
- 导入项目:将生成的项目导入到 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 项目实例
- 创建 Spring Boot 工程:使用 Spring Initializr 或 Spring Boot CLI 创建一个新的 Spring Boot 项目。
- 选择依赖:选择所需的依赖,如 Web、JPA 等。
- 创建主类:创建主类
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 应用
- 运行应用:使用
mvn spring-boot:run
命令运行应用,或者直接运行主类。 - 访问主页:默认情况下,Spring Boot 应用会在
http://localhost:8080
启动并运行。
mvn spring-boot:run
Spring Boot 常用配置
应用配置文件详解(application.properties/application.yml)
Spring Boot 使用 application.properties
或 application.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
- 添加依赖:在
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>
- 配置 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>
- 编写 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
- 添加依赖:在
pom.xml
中添加 Spring Security 依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
- 配置 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();
}
}
共同学习,写下你的评论
评论加载中...
作者其他优质文章