背景
在我看来编程是一棵树,编程语言就是这棵树由主干生长出来的树枝,而各种语言的框架则就像是树枝上的树叶,是当前这门语言的结晶,在实际的生产环境中扮演着重要角色,学习这些框架能够帮我们真正的具备实际开发能力,进而找到一份好的工作,有兴趣可以看看聊聊自学编程这篇文章,主要是我对于编程的一些看法,也许会对你有所启发。
何为Spring Boot
在说Spring Boot之前先要了解Spring,那么Spring是什么呢?Spring 框架是一个分层的、面向切面的Java应用程序的一站式轻量级解决方案,它是Spring技术栈的核心和基础,是为了解决企业级应用开发的复杂性而创建的。我们还是遵循之前所说的学习是一新事物时,先要略其大观,不求甚解。在这里先不管什么分层,面向切面,现在只需要知道Spring是一个Java EE的开发框架,帮助开发通俗意义上的Java后端。
那么Spring Boot又是什么呢?Spring Boot是Pivotal团队在Spring的基础上提供的一套全新的开源框架,其目的是为了简化Spring应用的搭建和开发过程。Spring Boot去除了大量的 XML配置文件,简化了复杂的依赖管理。Spring Boot具有Spring一切优秀特性,Spring能做的事,Spring Boot都可以做,而且使用更加简单,功能更加丰富,性能更加稳定而健壮。随着近些年来微服务技术的流行,Spring Boot也成了时下炙手可热的技术。Spring Boot集成了大量常用的第三方库配置,Spring Boot应用中这些第三方库几乎可以是零配置的开箱即用(out-of-the-box)大部分的 Spring Boot 应用都只需要非常少量的配置代码(基于Java的配置),开发者能够更加专注于业务逻辑。由此可以看出Spring Boot是由Spring衍生出的,传统的Spring框架很多复杂的配置,而Spring Boot所做的就是使用合理的默认值简化Spring一系列的配置,提高开发效率,而使用合理的默认值就是Spring Boot中核心的设计思想“约定优于配置”。
上面我们已经介绍了什么是Spring,什么是Spring Boot,还是老规矩why比what更重要,为什么我们需要Spring Boot,它的优势优势什么呢?
快速构建:使用Spring Initializr可以快速创建项目,同时提供了丰富的解决方案,便于快速集成各种解决方案,提升开发效率。
简化依赖:提供了丰富的Starters,简化Maven配置,避免版本兼容问题。
一键部署:内嵌Servlet容器,如Tomcat、Jetty,能够直接打包成可执行JAR文件独立运行,支持Jenkins、Docker,轻松实现自动化运维。
应用监控:自带Actuator监控组件,轻松监控服务的各项状态。使用Spring Boot Admin可以轻松部署功能完善的应用监控体系。
总的来说,Spring Boot让构建、编码、配置、部署、监控都变得非常简单。
开启Spring Boot之旅
项目创建
如下图所示,在IDEA中可以通过Spring Initializr快速创建项目,Group是公司,Artifact是项目名称,点击下一步即可创建一个Spring Boot项目。
项目结构
接下来我们看一下新建项目的项目结构,如下图所示
从上面可以看到,我们新建的test项目只有3个主要目录
- src/main/java:程序开发以及主程序目录
- src/main/resources:配置文件和资源文件目录
- src/test/java:测试程序目录
然而一个完整的项目包括前台页面、model实体、数据库访问、公共基础类等非常多的文件和目录,Spring Boot建议目录如下图
如图中com.qstack.test为根目录应包括:
- TestApplication.java:建议放到根目录下,是项目的启动类,Spring Boot项目只能有一个main()方法入口。
- comm:建议放置公共的类,如全局的配置文件、工具类等。
- model:主要用于实体(Entity)。
- repository:主要用于数据库访问层的代码
- service:主要是业务类代码
- web:负责前台页面访问Controller路由
resources目录下包括: - static:存放web访问的静态资源如JS、CSS、图片等。
- templates:存放页面模版
- application.properties: 存放项目的配置信息
test目录存放单元测试代码,目录结构与java目录结构相同。
pom.xml用于配置项目依赖包以及其他配置。
pom.xml解析
pom.xml是Maven项目中非常重要的配置文件,我们新建的test项目的pom.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 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.6.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.qstack</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>test</name>
<description>test</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<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>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
pom.xml主要包含四个部分,下面是项目的描述信息。groupId是项目的包路径,artifactId是项目名称,version是项目版本号,name是项目名称,descriptoion是项目描述。
<groupId>com.qstack</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>test</name>
<description>test</description>
pom.xml还包含项目的依赖,项目的依赖信息分为parent和dependencies两部分,以下是parent部分。parent是配置父级目录的信息,Maven支持项目的父子结构,引入后会默认继承父级的配置,此版本引入spring-boot-starter-parent定义Spring Boot的基础版。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
dependencies是配置项目所需要的依赖包,Spring Boot体系内依赖组件不需要填写具体版本号。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<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>
</dependencies>
下面是项目构建的公共变量,指明了jdk版本。
<properties>
<java.version>1.8</java.version>
</properties>
最后一部分是构建配置信息
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
hello world
首先检查一下pom.xml中有没有以下依赖,没有则加上。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
在之前新建的web目录下新建HelloController如下
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "Hello @Spring Boot!!!";
}
}
然后启动项目,在浏览器输入http://localhost:8080/hello, 结果如下
最后
有兴趣可以关注公众号QStack,会定期分享一些文章和免费的学习资源。