背景
在我看來(lái)編程是一棵樹(shù),編程語(yǔ)言就是這棵樹(shù)由主干生長(zhǎng)出來(lái)的樹(shù)枝,而各種語(yǔ)言的框架則就像是樹(shù)枝上的樹(shù)葉,是當(dāng)前這門(mén)語(yǔ)言的結(jié)晶,在實(shí)際的生產(chǎn)環(huán)境中扮演著重要角色,學(xué)習(xí)這些框架能夠幫我們真正的具備實(shí)際開(kāi)發(fā)能力,進(jìn)而找到一份好的工作,有興趣可以看看聊聊自學(xué)編程這篇文章,主要是我對(duì)于編程的一些看法,也許會(huì)對(duì)你有所啟發(fā)。
何為Spring Boot
在說(shuō)Spring Boot之前先要了解Spring,那么Spring是什么呢?Spring 框架是一個(gè)分層的、面向切面的Java應(yīng)用程序的一站式輕量級(jí)解決方案,它是Spring技術(shù)棧的核心和基礎(chǔ),是為了解決企業(yè)級(jí)應(yīng)用開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。我們還是遵循之前所說(shuō)的學(xué)習(xí)是一新事物時(shí),先要略其大觀,不求甚解。在這里先不管什么分層,面向切面,現(xiàn)在只需要知道Spring是一個(gè)Java EE的開(kāi)發(fā)框架,幫助開(kāi)發(fā)通俗意義上的Java后端。
那么Spring Boot又是什么呢?Spring Boot是Pivotal團(tuán)隊(duì)在Spring的基礎(chǔ)上提供的一套全新的開(kāi)源框架,其目的是為了簡(jiǎn)化Spring應(yīng)用的搭建和開(kāi)發(fā)過(guò)程。
Spring Boot去除了大量的 XML配置文件,簡(jiǎn)化了復(fù)雜的依賴(lài)管理。Spring Boot具有Spring一切優(yōu)秀特性,Spring能做的事,Spring Boot都可以做,而且使用更加簡(jiǎn)單,功能更加豐富,性能更加穩(wěn)定而健壯。
隨著近些年來(lái)微服務(wù)技術(shù)的流行,Spring Boot也成了時(shí)下炙手可熱的技術(shù)。Spring Boot集成了大量常用的第三方庫(kù)配置,Spring Boot應(yīng)用中這些第三方庫(kù)幾乎可以是零配置的開(kāi)箱即用(out-of-the-box)大部分的 Spring Boot 應(yīng)用都只需要非常少量的配置代碼(基于Java的配置),開(kāi)發(fā)者能夠更加專(zhuān)注于業(yè)務(wù)邏輯。
由此可以看出Spring Boot是由Spring衍生出的,傳統(tǒng)的Spring框架很多復(fù)雜的配置,而Spring Boot所做的就是使用合理的默認(rèn)值簡(jiǎn)化Spring一系列的配置,提高開(kāi)發(fā)效率,而使用合理的默認(rèn)值就是Spring Boot中核心的設(shè)計(jì)思想“約定優(yōu)于配置”。
上面我們已經(jīng)介紹了什么是Spring,什么是Spring Boot,還是老規(guī)矩why比what更重要,為什么我們需要Spring Boot,它的優(yōu)勢(shì)是什么呢?
- 快速構(gòu)建:使用Spring Initializr可以快速創(chuàng)建項(xiàng)目,同時(shí)提供了豐富的解決方案,便于快速集成各種解決方案,提升開(kāi)發(fā)效率。
- 簡(jiǎn)化依賴(lài):提供了豐富的Starters,簡(jiǎn)化Maven配置,避免版本兼容問(wèn)題。
- 一鍵部署:內(nèi)嵌Servlet容器,如Tomcat、Jetty,能夠直接打包成可執(zhí)行JAR文件獨(dú)立運(yùn)行,支持Jenkins、Docker,輕松實(shí)現(xiàn)自動(dòng)化運(yùn)維。
- 應(yīng)用監(jiān)控:自帶Actuator監(jiān)控組件,輕松監(jiān)控服務(wù)的各項(xiàng)狀態(tài)。使用Spring Boot Admin可以輕松部署功能完善的應(yīng)用監(jiān)控體系。
總的來(lái)說(shuō),Spring Boot讓構(gòu)建、編碼、配置、部署、監(jiān)控都變得非常簡(jiǎn)單。
開(kāi)啟Spring Boot之旅
項(xiàng)目創(chuàng)建
如下圖所示,在IDEA中可以通過(guò)Spring Initializr快速創(chuàng)建項(xiàng)目,Group是公司,Artifact是項(xiàng)目名稱(chēng),點(diǎn)擊下一步即可創(chuàng)建一個(gè)Spring Boot項(xiàng)目。
項(xiàng)目結(jié)構(gòu)
接下來(lái)我們看一下新建項(xiàng)目的項(xiàng)目結(jié)構(gòu),如下圖所示
從上面可以看到,我們新建的test項(xiàng)目只有3個(gè)主要目錄* src/main/java:程序開(kāi)發(fā)以及主程序目錄
- src/main/resources:配置文件和資源文件目錄
- src/test/java:測(cè)試程序目錄 然而一個(gè)完整的項(xiàng)目包括前臺(tái)頁(yè)面、model實(shí)體、數(shù)據(jù)庫(kù)訪問(wèn)、公共基礎(chǔ)類(lèi)等非常多的文件和目錄,Spring Boot建議目錄如下圖
如圖中com.qstack.test為根目錄應(yīng)包括:* TestApplication.java:建議放到根目錄下,是項(xiàng)目的啟動(dòng)類(lèi),Spring Boot項(xiàng)目只能有一個(gè)main()方法入口。
- comm:建議放置公共的類(lèi),如全局的配置文件、工具類(lèi)等。
- model:主要用于實(shí)體(Entity)。
- repository:主要用于數(shù)據(jù)庫(kù)訪問(wèn)層的代碼
- service:主要是業(yè)務(wù)類(lèi)代碼
- web:負(fù)責(zé)前臺(tái)頁(yè)面訪問(wèn)Controller路由 resources目錄下包括:
- static:存放web訪問(wèn)的靜態(tài)資源如JS、CSS、圖片等。
- templates:存放頁(yè)面模版
- application.properties: 存放項(xiàng)目的配置信息 test目錄存放單元測(cè)試代碼,目錄結(jié)構(gòu)與java目錄結(jié)構(gòu)相同。pom.xml用于配置項(xiàng)目依賴(lài)包以及其他配置。
pom.xml解析
pom.xml是Maven項(xiàng)目中非常重要的配置文件,我們新建的test項(xiàng)目的pom.xml內(nèi)容如下:
<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<span class="hljs-name"modelVersion>
<parent>
<groupId>org.springframework.boot<span class="hljs-name"groupId>
<artifactId>spring-boot-starter-parent<span class="hljs-name"artifactId>
<version>2.6.5<span class="hljs-name"version>
<relativePath/>
<span class="hljs-name"parent>
<groupId>com.qstack<span class="hljs-name"groupId>
<artifactId>test<span class="hljs-name"artifactId>
<version>0.0.1-SNAPSHOT<span class="hljs-name"version>
<name>test<span class="hljs-name"name>
<description>test<span class="hljs-name"description>
<properties>
<java.version>1.8<span class="hljs-name"java.version>
<span class="hljs-name"properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot<span class="hljs-name"groupId>
<artifactId>spring-boot-starter<span class="hljs-name"artifactId>
<span class="hljs-name"dependency>
<dependency>
<groupId>org.springframework.boot<span class="hljs-name"groupId>
<artifactId>spring-boot-starter-web<span class="hljs-name"artifactId>
<span class="hljs-name"dependency>
<dependency>
<groupId>org.springframework.boot<span class="hljs-name"groupId>
<artifactId>spring-boot-starter-test<span class="hljs-name"artifactId>
<scope>test<span class="hljs-name"scope>
<span class="hljs-name"dependency>
<span class="hljs-name"dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot<span class="hljs-name"groupId>
<artifactId>spring-boot-maven-plugin<span class="hljs-name"artifactId>
<span class="hljs-name"plugin>
<span class="hljs-name"plugins>
<span class="hljs-name"build>
<span class="hljs-name"project>
pom.xml主要包含四個(gè)部分,下面是 「項(xiàng)目的描述信息」 。groupId是項(xiàng)目的包路徑,artifactId是項(xiàng)目名稱(chēng),version是項(xiàng)目版本號(hào),name是項(xiàng)目名稱(chēng),descriptoion是項(xiàng)目描述。
<groupId>com.qstack<span class="hljs-name"groupId>
<artifactId>test<span class="hljs-name"artifactId>
<version>0.0.1-SNAPSHOT<span class="hljs-name"version>
<name>test<span class="hljs-name"name>
<description>test<span class="hljs-name"description>
pom.xml還包含 「項(xiàng)目的依賴(lài)」 ,項(xiàng)目的依賴(lài)信息分為parent和dependencies兩部分,以下是parent部分。parent是配置父級(jí)目錄的信息,Maven支持項(xiàng)目的父子結(jié)構(gòu),引入后會(huì)默認(rèn)繼承父級(jí)的配置,此版本引入spring-boot-starter-parent定義Spring Boot的基礎(chǔ)版。
<parent>
<groupId>org.springframework.boot<span class="hljs-name"groupId>
<artifactId>spring-boot-starter-parent<span class="hljs-name"artifactId>
<version>2.6.5<span class="hljs-name"version>
<relativePath/>
<span class="hljs-name"parent>
dependencies是配置項(xiàng)目所需要的依賴(lài)包,Spring Boot體系內(nèi)依賴(lài)組件不需要填寫(xiě)具體版本號(hào)。
<dependencies>
<dependency>
<groupId>org.springframework.boot<span class="hljs-name"groupId>
<artifactId>spring-boot-starter<span class="hljs-name"artifactId>
<span class="hljs-name"dependency>
<dependency>
<groupId>org.springframework.boot<span class="hljs-name"groupId>
<artifactId>spring-boot-starter-web<span class="hljs-name"artifactId>
<span class="hljs-name"dependency>
<dependency>
<groupId>org.springframework.boot<span class="hljs-name"groupId>
<artifactId>spring-boot-starter-test<span class="hljs-name"artifactId>
<scope>test<span class="hljs-name"scope>
<span class="hljs-name"dependency>
<span class="hljs-name"dependencies>
下面是 「項(xiàng)目構(gòu)建的公共變量」 ,指明了jdk版本。
<properties>
<java.version>1.8<span class="hljs-name"java.version>
<span class="hljs-name"properties>
最后一部分是**「構(gòu)建配置信息」**
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot<span class="hljs-name"groupId>
<artifactId>spring-boot-maven-plugin<span class="hljs-name"artifactId>
<span class="hljs-name"plugin>
<span class="hljs-name"plugins>
<span class="hljs-name"build>
hello world
首先檢查一下pom.xml中有沒(méi)有以下依賴(lài),沒(méi)有則加上。
<dependency>
<groupId>org.springframework.boot<span class="hljs-name"groupId>
<artifactId>spring-boot-starter-web<span class="hljs-name"artifactId>
<span class="hljs-name"dependency>
在之前新建的web目錄下新建HelloController如下
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "Hello @Spring Boot!!!";
}
}
然后啟動(dòng)項(xiàng)目,在瀏覽器輸入http://localhost:8080/hello
-
JAVA
+關(guān)注
關(guān)注
19文章
2952瀏覽量
104480 -
開(kāi)發(fā)
+關(guān)注
關(guān)注
0文章
364瀏覽量
40788 -
spring
+關(guān)注
關(guān)注
0文章
338瀏覽量
14295
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論