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

然后,很不幸,我创建失败了,出现了如下错误:
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下的程序入口:BootdemoApplicationsrc/main/resources下的配置文件:application.propertiessrc/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();
}
}
这种方法在业务开发的时候并不是特别推荐,更适合用于框架封装等场景,关于更多封装上的技巧,后面我们在进阶教程中详细讲解。

浙公网安备 33010602011771号