深入学习Spring Boot框架

news/2025/10/19 16:28:46/文章来源:https://www.cnblogs.com/htmlww/p/19151010

一、引言

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.mzph.cn/news/940422.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年水产养殖设备厂家推荐排行榜,PP鱼池/微滤机/不锈钢微滤机/锦鲤池微滤机一体机/全自动污水过滤器/生物过滤器/循环水养殖系统公司推荐!

2025年水产养殖设备厂家推荐排行榜:PP鱼池、微滤机、不锈钢微滤机、锦鲤池微滤机一体机、全自动污水过滤器、生物过滤器、循环水养殖系统公司推荐随着水产养殖行业的快速发展,高效、环保的养殖设备成为提升养殖效益的…

预测不可预测之物的校准学习技术

本文探讨了校准学习在供应链预测中的应用,介绍了Dean Foster与Rakesh Vohra获得时间检验奖的研究成果,阐述了校准技术如何提高预测准确性,以及在机器学习和博弈论中的重要意义。“你正在尝试预测不可预测的事物” 某…

java语言程序设计类与对象课后作业 - 20243867孙堃2405

一、课件代码验证 1. 自定义类与对象使用代码 // 自定义类 MyClass class MyClass {// 私有字段private int value;// 公有字段public String Information;// 方法:设置value值public void setValue(int value) {this…

2025年智能防爆灯/工矿灯厂家推荐排行榜,专业安全与高效照明解决方案!

2025年智能防爆灯/工矿灯厂家推荐排行榜,专业安全与高效照明解决方案!随着工业和矿业领域的快速发展,智能防爆灯和工矿灯的需求日益增长。这些灯具不仅需要满足基本的照明需求,还需要具备高安全性、耐用性和智能化…

AI模型测评平台工程化实战十二讲(第五讲:大模型测评分享机制:安全、高效的结果展示与协作)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Java基础——包机制,JavaDoc生成文档

Java基础——包机制,JavaDoc生成文档包机制 为了更好地组织类,Java提供了包机制,用于区分类名的命名空间 //包语句的语法结构如下 package pkg1[. pkg2[. pkg3...]]; (若文件属于包,必须在首行加上该语句) //使用…

Java 无锁方式实现高性能线程

一、传统单例实现的局限性 在现代高并发Java应用中,传统的单例实现方式(如DCL双重检查锁定)虽然解决了线程安全问题,但仍存在以下局限性:依赖锁机制(synchronized)导致上下文切换开销 volatile关键字在某些JVM实…

用 【C# + Winform + MediaPipe】 构建人脸468点识别

用 【C# + Winform + MediaPipe】 构建人脸468点识别2025-10-19 16:14 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; dis…

10.19日模考总结

本周进行了标准OI普及组模考测试 得分情况题目名称 做法 预计得分 实际得分火车线路 模拟 100 100奶牛卧室 同余定理 100 70小信的同调序列 动态规划 10 30新小信走迷宫 贪心、动态规划 20 40做题流程 首先点开第一题,…

详细介绍:2020年美国新冠肺炎疫情数据分析与可视化

详细介绍:2020年美国新冠肺炎疫情数据分析与可视化pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

java流程控制。

用户交互Scanner之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。java.util.Scanner 是Java5 的新特征,我们可以通过Scanner 类来获取用户的输入…

mysql嵌套查询如何利用索引?

SELECT foreach_id FROM zyp_作业计划 where jtPlanKey = 2000000507162 --jtPlanKey 为主键 ,int64类型,foreach_id 为varcharSELECT OnLineVidio FROM jobbill where foreach_id =‘731221717606469’ …

Misaka2298 的写题自检表

数据范围看了吗?会爆 int 吗?会爆 longlong 吗? debug 删完了吗? freopen 写了吗? 题目真的读懂了吗?数据范围有漏看吗? 有时间写对拍吗?对拍好写吗?是应该继续冲还是应该写拍子呢? 会爆内存吗?检查空间占用…

解码Linux文件IO之LCD屏原理及应用

LCD 基本概念与结构 核心定义 LCD(Liquid Crystal Display)即液晶显示器,核心是通过液晶分子的电光效应控制光线透过,结合光学组件实现图像显示。其基本构造是在两片平行玻璃基板间夹着液晶盒,关键组件分工如下:…

2025年扑灭司林厂家推荐排行榜,高效环保扑灭司林,专业生产与市场口碑深度解析!

2025年扑灭司林厂家推荐排行榜:高效环保扑灭司林,专业生产与市场口碑深度解析随着环保意识的不断增强,高效环保的扑灭司林产品越来越受到市场的青睐。扑灭司林作为一种重要的农药成分,在农业、林业以及公共卫生领域…

微信小程序入门学习教程,从入门到精通,WXML(WeiXin Markup Language)语法基础(8) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Java 中 NullPointerException 的 3 个常见原因及解决

空指针是 Java 最常见异常,主要因 “调用了 null 对象的方法 / 属性”,常见场景:​ 对象没初始化就用(如User u = null; u.getName()),解决:先u = new User();​ 方法返回 null 没判断(如String s = getStrin…

Java 方法参数传递:到底是值传递还是引用传递?

结论:只有值传递!很多人误解引用类型是 “引用传递”,其实是传递了 “引用的副本(地址值)”。​ 比如传 int 时,复制值给方法参数,修改参数不影响原变量;传对象时,复制地址给参数,若修改参数指向的对象内容(…

ES6 箭头函数

引言ES6 箭头函数(=>)彻底改变了 JavaScript 的编码风格,提供简洁语法和词法作用域绑定。但不当使用可能引发意外行为,本文将揭示其核心特性和避坑指南。1. 词法绑定 this:告别 bind 箭头函数继承外层 this,解决…

centos 7.9快速部署ARL(Asset Reconnaissance Lighthouse)资产侦察灯塔系统用于信息收集

github项目地址:https://github.com/honmashironeko/ARL-docker #感谢项目作者做出的贡献如果git下载不了,下载zip包 通过网盘分享的文件:ARL-docker-main.zip 链接: https://pan.baidu.com/s/1lF3EBWCkJHjW0P9Irf…