乐趣区

SpringBoot 实战 (二) | 第一个 SpringBoot 工程详解

微信公众号:一个优秀的废人如有问题或建议,请后台留言,我会尽力解决你的问题。
前言
哎呦喂,按照以往的惯例今天周六我的安排应该是待在家学学猫叫啥的。但是今年这种日子就可能一去不复返了,没法办法啊。前几天年轻,立下了一周至少更两篇文章的 flag。废话少说,今天接着前文给你们带来了第一个 SpringBoot 工程的详解。
第一个 SpringBoot 工程
前文已经说过了 SpringBoot 工程的创建,这里不再赘述,还不会的朋友,请看下面这篇文章。
如何使用 IDEA 构建 Spring Boot 工程
学过编程的都知道,学习一门新语言的第一个项目肯定是 Hello World。那这里也不例外,我们先创建一个非常简单的 Hello World 工程。给大家讲解 SpringBoot 的项目目录。创建信息如下:

由于本文重点旨在讲解 SpringBoot 的项目目录。所以选择的依赖包非常简单,就选择 Web 足矣。

SpringBoot 项目目录详解
创建成功之后的 SpringBoot 项目目录如下,以下对各主要目录的作用进行讲解:

src 是整个工程的根目录,基本上做 web 开发你的代码大部分都放在这里。其中 main 目录下放置的是你的 Java 代码;resource 目录,顾名思义就是放置配置文件、静态资源 (static) 以及前端模板(template)。
test 目录就是放置你的单元测试代码。
target 就是项目编译生成的目录,里面包含代码编译后的 class 文件以及一些静态资源和配置文件。
External Libraries 这里放置了,pom.xml 导入的依赖包。
其他没提到的目录都是不重要的。

由上图项目目录,可以看到有几个文件,这些文件有些是我新建的,有些是项目生成的。下面我会讲解:
pom.xml 这个文件是整个项目最重要的文件,它包含了整个项目的依赖包。Maven 会根据这个文件导入相关的我们开发需要的依赖包。代码如下:
可以看到 pom.xml 中一共有 4 个依赖,其中只有 Junit 是我手动加入的,用于单元测试。
其他的如 Spring Boot 启动父依赖、Spring Boot web 依赖、Spring Boot web test 依赖都是创建项目时,勾选 web 选项卡而生成的。这几个依赖包的额作用就是 内嵌 Tomcat 容器,集成各 Spring 组件。比如 如果没有依赖 web 包,Spring 的两大核心功能 IOC 和 AOP 将不会生效。
<?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>
<groupId>com.nasus</groupId>
<artifactId>helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>helloworld</name>
<description>Demo project for Spring Boot</description>

<properties>
<java.version>1.8</java.version>
</properties>

<!– Spring Boot 启动父依赖 –>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!– lookup parent from repository –>
</parent>

<dependencies>
<!– Spring Boot web 依赖 –>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<!– Junit –>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>

HelloworldApplication.java 最为重要,它由项目生成,是整个工程的应用启动类 main 函数。代码由项目生成,代码如下:SpringApplication 引导应用,并将 HelloworldApplication 本身作为参数传递给 run 方法。具体 run 方法会启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件。
需要注意的是,这个类必须放在其他类的上册目录,拿上述目录举个栗子,若其他 HelloWorldController.java 类位于 com.nasus.controller 下。则 HelloworldApplication.java 类必须放置在 com.nasus 下或者 com 下(层级必须大于其他 java 类)。否则启动项目访问会报 Whitelabel Error Page 错误,原因是项目扫描不到 @RestController、@RequestMapping 等注解配置的方法和类。

package com.nasus.helloworld;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloworldApplication {
public static void main(String[] args) {
SpringApplication.run(HelloworldApplication.class, args);
}
}
HelloWorldController 是我手动编写的,代码如下:@RestController 和 @RequestMapping 注解是来自 SpringMVC 的注解,它们不是 SpringBoot 的特定部分。
其中 @RestController 注解的作用是:提供实现了 REST API,可以服务 JSON、XML 或者其他。这里是以 String 的形式渲染出结果。
其中 @RestController 注解的作用是:提供路由信息,”/“路径的 HTTP Request 都会被映射到 sayHello 方法进行处理。
 具体参考,Spring 官方的文档《Spring Framework Document》
package com.nasus.controller;

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

/**
* Project Name:helloworld <br/>
* Package Name:com.nasus.controller <br/>
* Date:2019/1/5 13:59 <br/>
* <b>Description:</b> TODO: 描述该类的作用 <br/>
*
* @author <a href=”turodog@foxmail.com”>nasus</a><br/>
* Copyright Notice =========================================================
* This file contains proprietary information of Eastcom Technologies Co. Ltd.
* Copying or reproduction without prior written approval is prohibited.
* Copyright (c) 2019 =======================================================
*/
@RestController
public class HelloWorldController {

@RequestMapping(“/hello”)
public String sayHello() {
return “Hello,World!”;
}

}
写完 Controller 层的代码,我们就可以启动此项目。点击 IDEA 项目启动按钮,效果如下:

好的程序必须配备完善的单元测试。HelloWorldControllerTest.java 文件是由我编写的主要作用就是测试 HelloWorldController.java 中的方法。这里用的是 Junit 依赖包进行单元测试,代码如下:这里的逻辑就是测试 HelloWorldController.java 的 sayHello 方法输出的字符是否是 Hello,World!
package com.nasus;

import static org.junit.Assert.assertEquals;
import com.nasus.controller.HelloWorldController;
import org.junit.Test;

/**
* Project Name:helloworld <br/>
* Package Name:com.nasus <br/>
* Date:2019/1/5 14:01 <br/>
* <b>Description:</b> TODO: 描述该类的作用 <br/>
*
* @author <a href=”turodog@foxmail.com”>nasus</a><br/>
* Copyright Notice =========================================================
* This file contains proprietary information of Eastcom Technologies Co. Ltd.
* Copying or reproduction without prior written approval is prohibited.
* Copyright (c) 2019 =======================================================
*/
public class HelloWorldControllerTest {

@Test
public void testSayHello() {
assertEquals(“Hello,World!”,new HelloWorldController().sayHello());
}

}
编写完成之后,可以通过以下按钮启动单元测试类。

测试结果如下:可以看到红圈框住的地方,出现这个绿色标志证明单元测试没问题。sayhello 方法的结果是对的。

后语
我为什么要写这种这么简单的教程?是这样的,我始终认为比我聪明的人有很多,但比我笨的人也不少。在中国有很多你认为众所周知的事,其实有一车人根本不知道,这篇文章哪怕只帮助到一个人,足矣。
之后我打算出一个 SpringBoot 系列的教程,敬请关注与指正,本人也是一个小菜鸟在打怪升级中,如本文有不正确的地方,烦请指正。一起学习一起进步。
以上就是我对 SpringBoot 工程的理解,希望对你们有帮助。最后,对 Python、Java 感兴趣请长按二维码关注一波,我会努力带给你们价值,如果觉得本文对你哪怕有一丁点帮助,请帮忙点好看,让更多人知道。
另外,关注之后在发送 1024 可领取免费学习资料。资料内容详情请看这篇旧文:Python、C++、Java、Linux、Go、前端、算法资料分享

退出移动版