当前位置: 首页 > news >正文

深入学习Spring Boot框架

一、引言

Spring Boot是一个基于Spring框架的快速应用开发框架,它极大地简化了新Spring应用的初始搭建及开发过程。通过“约定优于配置”的理念,Spring Boot减少了大量样板代码和繁琐配置,让开发者能够更专注于业务逻辑的实现。无论是小型项目的快速迭代,还是大型企业级应用的构建,Spring Boot都展现出了强大的优势和广泛的适用性。

二、Spring Boot基础概念

(一)核心特性

  1. 自动配置:Spring Boot能依据项目中的依赖自动配置Spring框架。例如,当项目引入spring-boot-starter-web依赖时,它会自动配置Tomcat作为嵌入式服务器,并设置好相关的Bean,开发者无需手动进行复杂的服务器和Bean配置。
  2. 独立运行:Spring Boot应用可直接打包成可执行的jar文件,使用java -jar命令即可运行,无需部署到外部服务器,方便快捷,大大提升了应用的部署效率。
  3. starter POMs:提供一系列“starter”依赖,开发者仅需在pom.xml中添加相应的starter,就能快速引入所需功能。比如添加spring-boot-starter-data-jpa可引入Spring Data JPA功能,用于数据库访问层的开发。
  4. Actuator:内置强大的监控和管理功能,通过HTTP、JMX等协议暴露应用内部信息,如健康检查、度量信息等。借助这些信息,开发者能够实时了解应用的运行状态,及时发现并解决问题。
  5. 外部化配置:支持从多种来源读取配置,包括application.propertiesapplication.yml、环境变量、命令行参数等。这使得在不同环境(开发、测试、生产)下切换配置变得轻松简单。

(二)与传统Spring框架的区别

传统Spring框架在开发时,需要开发者编写大量的XML配置文件来配置Bean、数据源、事务等,过程繁琐且容易出错。而Spring Boot采用“约定优于配置”,默认提供了许多合理的配置,大大减少了XML配置的需求,更多地使用Java注解进行配置,使开发过程更加简洁高效。同时,Spring Boot集成了各种常用功能的starter依赖,一键引入即可使用,而传统Spring框架集成新功能时需要手动添加多个依赖并进行复杂配置。

三、开发环境搭建

(一)必备工具

  1. JDK:Spring Boot要求Java 8或更高版本,可从Oracle官网或OpenJDK官网下载安装。安装完成后,配置好JAVA_HOME环境变量。
  2. IDE:推荐使用IntelliJ IDEA或Eclipse,它们对Spring Boot提供了良好的支持,拥有丰富的插件和便捷的开发功能。以IntelliJ IDEA为例,下载安装社区版或旗舰版后即可使用。
  3. 构建工具:Spring Boot支持Maven和Gradle,这里以Maven为例。从Maven官网下载安装包,解压后配置MAVEN_HOME环境变量,并将%MAVEN_HOME%\bin添加到系统PATH中。

(二)在IDE中配置Spring Boot支持

  1. IntelliJ IDEA:打开IntelliJ IDEA,在File -> Settings(或Preferences,Mac系统)中,搜索Spring,安装Spring Boot插件。安装完成后重启IDE,即可在创建项目时看到Spring Initializr选项。
  2. Eclipse:在Eclipse中,通过Help -> Eclipse Marketplace搜索并安装Spring Tools Suite (STS)插件。安装完成后,重启Eclipse,在File -> New中可找到Spring Starter Project选项用于创建Spring Boot项目。

四、Spring Boot项目搭建

(一)使用Spring Initializr创建项目

  1. 打开浏览器,访问https://start.spring.io/
  2. 在Spring Initializr页面,选择项目类型(如Maven或Gradle),这里以Maven为例;选择Java作为语言,设置JDK版本;填写项目元数据,包括Group(如com.example)、Artifact(如demo)、Name(项目名称)、Description(项目描述)等。
  3. 在依赖项中,根据项目需求添加依赖。例如,要开发一个Web应用,添加Spring Web依赖;若要使用数据库,添加Spring Data JPAMySQL Driver等相关依赖。
  4. 点击Generate按钮,下载生成的项目ZIP文件,解压到本地文件系统中。

(二)项目结构解析

解压后的项目目录结构如下:

demo
├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── example
│   │   │           └── demo
│   │   │               ├── DemoApplication.java
│   │   │               └──...(其他Java类)
│   │   └── resources
│   │       ├── application.properties
│   │       └── static
│   │           └──...(静态资源文件)
│   │       └── templates
│   │           └──...(模板文件)
│   └── test
│       ├── java
│       │   └── com
│       │       └── example
│       │           └── demo
│       │               ├── DemoApplicationTests.java
│       │               └──...(其他测试类)
│       └── resources
│           └──...(测试资源文件)
└── target└──...(编译和打包后的文件)
 
 
  • pom.xml:Maven项目的核心配置文件,用于管理项目依赖、构建配置等。
  • src/main/java:存放项目的Java源代码。
  • src/main/resources:存放项目的资源文件,如application.properties配置文件、静态资源(static目录)、模板文件(templates目录,若使用模板引擎)等。
  • src/test:存放项目的测试代码和测试资源文件。
  • target:Maven编译和打包后生成的文件目录。

(三)添加依赖

若在创建项目时未添加全部所需依赖,可在pom.xml文件中手动添加。例如,添加Lombok依赖来简化Java代码中的Getter、Setter等方法的编写:

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.26</version><scope>provided</scope>
</dependency>
 
 

添加依赖后,在IDE中刷新Maven项目,Maven会自动下载相应的依赖包。

五、Spring Boot核心组件应用

(一)Spring MVC

Spring MVC是Spring框架中用于构建Web应用的模块,在Spring Boot中得到了很好的集成。通过Spring MVC,开发者可以轻松创建RESTful API、处理HTTP请求和响应。

  1. 创建Controller:在src/main/java/com/example/demo包下创建一个Controller类,例如UserController.java
package com.example.demo;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/users")
public class UserController {@GetMappingpublic String getUsers() {return "获取用户列表";}
}
 
 

上述代码中,@RestController注解表示该类是一个RESTful风格的控制器,返回的数据直接以JSON或XML等格式响应给客户端;@RequestMapping("/users")注解定义了该控制器处理的请求路径前缀为/users@GetMapping注解表示处理HTTP GET请求。

  1. 运行应用并测试:在DemoApplication.java类中,点击运行按钮启动Spring Boot应用。应用启动后,打开浏览器访问http://localhost:8080/users(默认端口为8080,若在application.properties中修改了端口,则使用修改后的端口),可看到浏览器中显示“获取用户列表”。

(二)Spring Data JPA

Spring Data JPA用于简化JPA(Java Persistence API)的使用,方便进行数据库操作。

  1. 配置数据库连接:假设使用MySQL数据库,在src/main/resources/application.properties文件中添加以下配置:
spring.datasource.url=jdbc:mysql://localhost:3306/yourdbname
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
spring.jpa.hibernate.ddl-auto=update
 
 

其中,spring.datasource.url指定数据库连接地址,spring.datasource.usernamespring.datasource.password为数据库用户名和密码,spring.jpa.hibernate.ddl-auto=update表示Hibernate会在启动时自动创建或更新表结构。

  1. 创建实体类:在src/main/java/com/example/demo包下创建一个实体类,例如User.java
package com.example.demo;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String name;private String email;// Getter和Setter方法,若使用Lombok,可省略,由Lombok自动生成public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}
}
 
 

@Entity注解表示该类是一个JPA实体类,对应数据库中的一张表;@Id注解标识该字段为主键,@GeneratedValue注解指定主键的生成策略。

  1. 创建Repository:在src/main/java/com/example/demo包下创建一个Repository接口,例如UserRepository.java
package com.example.demo;import org.springframework.data.jpa.repository.JpaRepository;public interface UserRepository extends JpaRepository<User, Long> {}
 
 

UserRepository接口继承自JpaRepositoryJpaRepository提供了基本的CRUD操作方法,无需开发者手动实现。第一个泛型参数User是实体类类型,第二个泛型参数Long是主键类型。

  1. 在Controller中使用Repository:修改UserController.java,添加获取用户列表的方法:
package com.example.demo;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
@RequestMapping("/users")
public class UserController {private final UserRepository userRepository;public UserController(UserRepository userRepository) {this.userRepository = userRepository;}@GetMappingpublic List<User> getUsers() {return userRepository.findAll();}
}
 
 

上述代码中,通过构造函数注入UserRepository,在getUsers方法中调用userRepository.findAll()方法从数据库中获取所有用户列表并返回。

(三)Spring Security

Spring Security用于为Spring Boot应用提供安全保障,实现用户认证、授权等功能。

  1. 添加依赖:在pom.xml中添加Spring Security依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency>
 
 
  1. 配置Spring Security:在src/main/java/com/example/demo包下创建一个配置类,例如SecurityConfig.java
package com.example.demo;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;@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/", "/home").permitAll().anyRequest().authenticated().and().formLogin().loginPage("/login").permitAll().and().logout().permitAll();}
}
 
 

上述配置中,@Configuration@EnableWebSecurity注解启用Spring Security配置;configure方法中,authorizeRequests()用于配置请求的访问权限,antMatchers("/", "/home").permitAll()表示允许所有用户访问根路径和/home路径,anyRequest().authenticated()表示其他所有请求需要认证;formLogin()配置表单登录相关设置,loginPage("/login")指定登录页面路径;logout()配置注销相关设置。

http://www.hskmm.com/?act=detail&tid=34364

相关文章:

  • 《探索C语言中数组的奥秘(下)》 - 教程
  • Java异步编程难题拆解
  • 2025年智能防爆灯/工矿灯厂家推荐排行榜,专业安全与高效照明解决方案!
  • 预测不可预测之物的校准学习技术
  • 2025年水产养殖设备厂家推荐排行榜,PP鱼池/微滤机/不锈钢微滤机/锦鲤池微滤机一体机/全自动污水过滤器/生物过滤器/循环水养殖系统公司推荐!
  • Java 无锁方式实现高性能线程
  • java语言程序设计类与对象课后作业 - 20243867孙堃2405
  • 详细介绍:2020年美国新冠肺炎疫情数据分析与可视化
  • java流程控制。
  • Java基础——包机制,JavaDoc生成文档
  • Misaka2298 的写题自检表
  • Java 中 NullPointerException 的 3 个常见原因及解决
  • Java 方法参数传递:到底是值传递还是引用传递?
  • ES6 箭头函数
  • mysql嵌套查询如何利用索引?
  • 解码Linux文件IO之LCD屏原理及应用
  • centos 7.9快速部署ARL(Asset Reconnaissance Lighthouse)资产侦察灯塔系统用于信息收集
  • 3 分钟搞懂 Java 中 this 关键字的用法
  • 折腾笔记[32]-windows部署vscode-server及使用命令行编译c#.net工程
  • Java 中 ArrayList 和 LinkedList 的选择技巧
  • Java 静态方法为什么不能访问非静态成员?
  • 2025润滑油厂家推荐:三特石化全合成长效发动机油,品质卓越!
  • Java 类与对象实践:从代码验证到四则运算开发
  • CF1032F Vasya and Maximum Matching
  • ctf常见编码
  • WPS中Mathtype插件消失不见解决方法
  • 2025气泡膜机优质厂家推荐:瑞康机械,高效生产与定制服务兼备!
  • 音视频编解码全流程之用Extractor后Decodec - 实践
  • P8817 [CSP-S 2022] 假期计划 解题笔记
  • 2025年塑料托盘厂家推荐排行榜,网格川字/九脚/田字/双面塑料托盘,平板/吹塑/注塑/焊接/印刷/组装款/高矮脚/反川字/立体库托盘公司精选!