SpringBoot学习笔记(一)——快速入门
一、第一个Springboot程序
本文我们将学习如何快速的创建一个Spring Boot应用,并且实现一个简单的Http请求处理。通过这个例子对Spring Boot有一个初步的了解,并体验其结构简单、开发快速的特性。
Spring官方提供了非常方便的工具Spring Initializr来帮助我们创建Spring Boot应用,我们也可以使用IDEA直接创建SpringBoot项目。
按步骤创建如下:
新建项目中选择Spring Initializr,按照如下要求配置;
在依赖模块选择Spring Web和Spring Boot DevTools这两个依赖(第二个依赖也可以不选)然后创建:
这里Springboot版本也可以选2.6.6
然后,很不幸,我创建失败了,出现了如下错误:
1 | Error: Cannot download 'https://start.spring.io/starter.zip?type=maven-project&bootVersion=2.7.3&groh |
好像是因为连接不到start.spring.io这个网站。
需要在相应位置把这个网址换成;
https://start.springboot.io/
在下列位置:
然后就项目创建成功了。
二、解读项目结构
2.1 项目结构解析
通过上面步骤完成了基础项目的创建。如上图所示,Spring Boot的基础结构共三个文件(具体路径根据用户生成项目时填写的Group所有差异):
src/main/java
下的程序入口:BootdemoApplication
src/main/resources
下的配置文件:application.properties
src/test/
下的测试入口:BootdemoApplicationTests
生成的BootdemoApplication
和BootdemoApplicationTests
类都可以直接运行来启动当前创建的项目,由于目前该项目未配合任何数据访问或Web模块,程序会在加载完Spring之后结束运行。
2.2 项目依赖解析
打开pom.xml
,一起来看看Spring Boot项目的依赖:
<?xml version="1.0" encoding="UTF-8"?> <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.3</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>bootdemo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>bootdemo</name> <description>bootdemo</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2.3 编写一个http接口
2.4 编写单元测试用例
3.工程结构推荐
3.1 典型示例
以下结构是比较推荐的package组织方式:
com
+- example
+- myproject
+- Application.java
|
+- domain
| +- Customer.java
| +- CustomerRepository.java
|
+- service
| +- CustomerService.java
|
+- web
| +- CustomerController.java
|
root package
:com.example.myproject
,所有的类和其他package都在root package之下。- 应用主类:
Application.java
,该类直接位于root package
下。通常我们会在应用主类中做一些框架配置扫描等配置,我们放在root package下可以帮助程序减少手工配置来加载到我们希望被Spring加载的内容 com.example.myproject.domain
包:用于定义实体映射关系与数据访问相关的接口和实现com.example.myproject.service
包:用于编写业务逻辑相关的接口与实现com.example.myproject.web
:用于编写Web层相关的实现,比如:Spring MVC的Controller等
上面的结构中,root package
与应用主类的位置是整个结构的关键。由于应用主类在root package
中,所以按照上面的规则定义的所有其他类都处于root package
下的其他子包之后。默认情况下,Spring Boot的应用主类会自动扫描root package
以及所有子包下的所有类来进行初始化。
什么意思呢?举个例子,假设我们将com.example.myproject.web
包与上面所述的root package
:com.example.myproject
放在同一级,像下面这样:
com
+- example
+- myproject
+- Application.java
|
+- domain
| +- Customer.java
| +- CustomerRepository.java
|
+- service
| +- CustomerService.java
|
+- web
| +- CustomerController.java
|
这个时候,应用主类Application.java
在默认情况下就无法扫描到com.example.myproject.web
中的Controller定义,就无法初始化Controller中定义的接口。
3.2 非典型结构下的初始化
那么如果,我们一定要加载非root package
下的内容怎么办呢?
方法一:使用@ComponentScan
注解指定具体的加载包,比如:
@SpringBootApplication @ComponentScan(basePackages="com.example") public class Bootstrap { public static void main(String[] args) { SpringApplication.run(Bootstrap.class, args); } } |
这种方法通过注解直接指定要扫描的包,比较直观。如果有这样的需求也是可以用的,但是原则上还是推荐以上面的典型结构来定义,这样也可以少写一些注解,代码更加简洁。
方法二:使用@Bean
注解来初始化,比如:
@SpringBootApplication public class Bootstrap { public static void main(String[] args) { SpringApplication.run(Bootstrap.class, args); } @Bean public CustomerController customerController() { return new CustomerController(); } } |
这种方法在业务开发的时候并不是特别推荐,更适合用于框架封装等场景,关于更多封装上的技巧,后面我们在进阶教程中详细讲解。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现