为什么都喜欢采用 Spring Boot 来开发软件系统?

熟悉企业级开发框架的同学,对 SpringBoot 可能并不陌生,它是一款非常优秀的开箱即用的开发框架,开发者可以使用它来快速的构建一个可独立运行的 Java 应用程序。

尤其是在分布式领域,SpringBoot 通常用于快速构建微服务应用。

01、什么是 Spring Boot

SpringBoot 之所以如此的流行,主要在于它能帮助开发者预组装 Spring 的一系列组件,同时通过简化配置的方式,进一步的帮忙开发者减轻了基于 Spring 的应用程序的搭建和开发难度。

SpringBoot 和 Spring 的关系,就好比整车和零部件的关系,Spring 相当于发动机、底盘、汽车外壳等零部件,但是要想上路,还得自己动手拼装,配置很繁琐;而 SpringBoot 相当于帮我们预装了一辆汽车,各零部件还是 Spring 提供的,用户可以直接开车上路。

由此可见,两者并非取代关系,如果想要深度掌握 SpringBoot,了解 Spring 也同样至关重要。

SpringBoot 和 Spring 的版本关系,可以用如下内容来概括。

不同的版本,对系统环境的要求是不一样的,如果出现不兼容的现象,请确保系统环境满足最低要求。

02、快速入门

下面我们以创建一个 SpringBoot 应用为例,并实现一个简单的 Http 请求处理。通过这个例子,一起来体验一下 SpringBoot 中开箱即用的特性。

快速创建 SpringBoot 项目,通常有两种方式:

  • 第一种:使用 Spring Initializr 页面快速创建
  • 第二种:手动创建

下面我们一起来看看。

2.1、使用 Spring Initializr 页面创建

Spring Initializr 是 Spring 官方提供一个快速创建 SpringBoot 应用的便捷工具。

使用方式很简单,访问https://start.spring.io/地址,我们会看到如下界面。

填写相应的信息,最后点击Generate按钮,即可快速导出一个 SpringBoot 工程文件。

也可以点击Explore按钮,查看生成的文件目录结构。

从图中可以看出,Spring Boot 的基础结构共三个文件。

  • src/main/java:程序开发以及主程序入口
  • src/main/resources:配置文件
  • src/test/java:测试程序

将文件导入到IntelliJ IDEA中,运行SpringbootHelloApplicationmain方法,即可启动服务。

这种创建方式,虽然很快速但是不够灵活,通常采用的是官方最新版本,如果当前环境不满足要求,比如当前系统环境 JDK 版本为 8,可能服务无法运行哦。

2.2、手动创建

手动构建项目是最常用的一种方式,以IntelliJ IDEA为例,构建步骤如下。

2.2.1、创建一个 maven 项目

打开 IntelliJ IDEA,在菜单栏中选择File => New => Project..,我们可以看到如下图所示的窗口。

选择Maven,然后点击Next

填写相关的工程信息之后,继续点击Next,直到Finish,此时 Maven 项目创建完成。

2.2.2、添加 SpringBoot 依赖包

根据上文的版本对应关系,如果当前系统环境 JDK 版本为 8, SpringBoot 的适配版本为2.x,如果你当前系统环境 JDK 版本也是8,可以采用2.1.0.RELEASE版本来构建项目。

打开pom.xml文件,添加 SpringBoot 相关依赖包,内容如下。

xml 复制代码
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--引入spring boot父类-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
    </parent>
    <groupId>com.example</groupId>
    <artifactId>springboot-hello</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--添加相关依赖包-->
    <dependencies>
        <!--spring boot核心-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--spring boot 测试-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--springmvc web-->
        <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>
2.2.3、创建配置文件

src/main/resources目录下,创建一个application.properties全局配置文件,内容如下:

复制代码
spring.application.name=springboot-hello
2.2.4、编写服务启动类

src/main/java目录下,创建一个服务启动类Application,包名为com.example.springboot,代码如下。

java 复制代码
package com.example.springboot;

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);
    }
}
2.2.5、编写一个HTTP接口

src/main/java目录下,创建一个 http 接口,包名为com.example.springboot.web,代码如下。

java 复制代码
package com.example.springboot.web;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String index() {
        return "Hello World!";
    }
}
2.2.6、启动服务测试

最后运行Application类,即可启动 SpringBoot 应用程序,服务日志如下。

在浏览器中输入http://localhost:8080/hello,可以看到页面返回:Hello World!

2.2.7、编写单元测试用例

src/test/java目录下,可以编写一个单元测试来模拟 http 请求,创建一个ApplicationTests单元测试类,包名为com.example.springboot,代码如下。

java 复制代码
package com.example.springboot;

import static org.hamcrest.Matchers.equalTo;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;


@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {

    private MockMvc mvc;

    @Before
    public void setUp() throws Exception {
        mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
    }

    @Test
    public void getHello() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk())
                .andExpect(content().string(equalTo("Hello World!")));
    }

}

至此,通过 Maven 构建一个 SpringBoot 项目基本完成,整个工程目录结构如下:

03、小结

可以发现,使用 Spring Boot 可以非常方便、快速的搭建 web 项目,开发者不用关心框架之间的兼容性、版本号等问题,任何你想要的组件,只需要添加一下依赖包即可,真正做到了开箱即用的效果。

打开 Maven Project 工程中的 Dependencies 按钮,可以看到 SpringBoot 项目中的依赖包如下。

当添加 SpringBoot 相关依赖包时, Maven 会自动从中央仓库拉取相关组件,然后打包到工程中。SpringBoot 相当于一个框架的管理者,默认整合了很多框架的使用方式,开发者要使用某个框架时,只需要配置一下即可。

另外需要注意的地方是:SpringBootApplication注解默认扫描当前包下的相关类,如果把HelloController类所在的包移动到 com.example.springboot包之外是无法被扫描到,会导致请求出错,例如如下这种结构。

复制代码
com
  +- example
    +- springboot
      +- Application.java
    +- web
    |  +- HelloController.java
    |

面对这种情况,可以在SpringBootApplication注解下,新增一个扫包注解,自定义扫描包的路径,例如如下方式。

java 复制代码
@SpringBootApplication
@ComponentScan(basePackages="com.example")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

在实际的开发过程中,通常建议按照推荐的方式来划分包目录,将SpringBootApplication注解所在的位置放在最顶层,例如如下官方推荐的结构。

复制代码
com
 +- example
     +- myproject
         +- Application.java
         |
         +- customer
         |   +- Customer.java
         |   +- CustomerController.java
         |   +- CustomerService.java
         |   +- CustomerDao.java
         |
         +- order
             +- Order.java
             +- OrderController.java
             +- OrderService.java
             +- OrderDao.java

关于 Spring Boot 更多的 web 开发用法,我们在下篇文章中再给大家介绍。

04、参考

1、spring官网

写到最后

不会有人刷到这里还想白嫖吧?点赞对我真的非常重要!在线求赞。加个关注我会非常感激!

本文已整理到技术笔记中,此外,笔记内容还涵盖 Spring、Spring Boot/Cloud、Dubbo、JVM、集合、多线程、JPA、MyBatis、MySQL、微服务等技术栈。

需要的小伙伴可以点击 技术笔记 获取!

相关推荐
IT_陈寒4 分钟前
Vite 凭什么比 Webpack 快50%?揭秘闪电构建背后的黑科技
前端·人工智能·后端
颜酱5 分钟前
Dijkstra 算法:从 BFS 到带权最短路径
javascript·后端·算法
aircrushin1 小时前
OpenClaw“养龙虾”现象的社会技术学分析
前端·后端
37手游后端团队1 小时前
全网最简单!从零开始,轻松把 openclaw 小龙虾装回家
人工智能·后端·openai
用户8307196840821 小时前
Spring Boot WebClient性能比RestTemplate高?看完秒懂!
java·spring boot
Apifox1 小时前
测试数据终于不用到处复制了,Apifox 自动化测试新增「共用测试数据」
前端·后端·测试
Gardener1722 小时前
OpenStack Instance ID 映射机制详解
后端
无责任此方_修行中3 小时前
拒绝 AI 焦虑!一个普通程序员的真实 AI 工作流(附成本账单)
后端·程序员·ai编程
Assby3 小时前
从洋葱模型看Java与Go的设计哲学:为什么它们如此不同?
java·后端·架构