摘要:關(guān)于的自動(dòng)配置,這個(gè)是重點(diǎn)之一,后面細(xì)說(shuō)。在后續(xù)的學(xué)習(xí)中會(huì)慢慢學(xué)習(xí)到。紅色標(biāo)記的就是已經(jīng)掃描到了并初始化成功了。
以下內(nèi)容,如有問(wèn)題,煩請(qǐng)指出,謝謝
springboot出來(lái)也很久了,以前零散地學(xué)習(xí)了不少,不過(guò)很長(zhǎng)時(shí)間了都沒(méi)有在實(shí)際中使用過(guò)了,忘了不少,因此要最近準(zhǔn)備抽時(shí)間系統(tǒng)的學(xué)習(xí)積累下springboot,給自己留個(gè)根。
因?yàn)橐郧皩W(xué)過(guò)一些,這里就主要根據(jù)官方文檔來(lái)學(xué)習(xí)了,可能會(huì)根據(jù)自己的理解來(lái)選擇一些知識(shí)點(diǎn)的學(xué)習(xí)順序。官方文檔地址:https://docs.spring.io/spring...
官方文檔有十個(gè)大章節(jié),第一章是綜述,就不用太細(xì)看了,這里直接從第二章開始,也是介紹hello world的地方。
一開始就介紹了spring的四個(gè)目標(biāo):
更快地開發(fā)spring程序
提供默認(rèn)配置,開箱即用
提供大量插件(主要是各種starter)
避免代碼生成以及xml配置
上面這四個(gè)也是普通spring程序的弊病,簡(jiǎn)單來(lái)說(shuō)就是入門門檻高了,spring的各種配置是很重要的,但是項(xiàng)目搭建后就很少管,然后新啟動(dòng)一個(gè)項(xiàng)目又要花很長(zhǎng)時(shí)間去配置,配置得還是跟原來(lái)的差不多。
系統(tǒng)要求就是jdk1.7/servlet3.0及以上,1.6版本如何使用可以看很文檔后面的說(shuō)明。官方內(nèi)嵌支持三種servlet容器,最常見(jiàn)的tomcat,然后是jetty以及undertow(jboss默認(rèn)的),tomcat是默認(rèn)的,如何servlet容器替換后面會(huì)有內(nèi)容講解。
第10小章是講解如何生成springboot的基礎(chǔ)項(xiàng)目,這個(gè)是給缺少基礎(chǔ)的初學(xué)者看的,可以不用太關(guān)注,如果想生成,可以直接用https://start.spring.io/ 這個(gè)。
11小章開始正篇。
基礎(chǔ)的helloworld很簡(jiǎn)單,先配置maven文件,強(qiáng)烈建議使用springboot提供的parent,不要自己一個(gè)個(gè)去多帶帶依賴,這個(gè)parent本身寫的比較好,可以作為很多項(xiàng)目的參考。如果你有一定的基礎(chǔ),可以不照著官方的started文檔的代碼來(lái)寫,本身這段代碼也比較少比較簡(jiǎn)單。這里我構(gòu)造的項(xiàng)目結(jié)果如下,因?yàn)楹罄m(xù)就主要用這個(gè)項(xiàng)目來(lái)學(xué)習(xí)springboot,因此就取名main,包名也盡量做到規(guī)范
具體代碼如下
pom.xml
4.0.0 pr.study.springboot main 1.0.0 org.springframework.boot spring-boot-starter-parent 1.5.8.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-maven-plugin
Main,java
package pr.study.springboot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Main { public static void main(String[] args) { SpringApplication.run(Main.class, args); } }
HelloWorldController.class
package pr.study.springboot.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloWorldController { @RequestMapping("/hello") public String hello() { return "hello world"; } }
幾點(diǎn)說(shuō)明:
1、因?yàn)閟pringboot-parent中的dependencies是使用dependencyManagement的形式,這種形式的依賴不會(huì)強(qiáng)制繼承,必須在子pom中顯式聲明才會(huì)繼承,但是不用聲明版本,聲明了版本會(huì)提示一個(gè)warning。
2、繼承spring-boot-maven-plugin是為了利用springboot的fat-jar打包功能,和dependency一樣,也是使用Management的形式,需要顯式聲明才會(huì)依賴。
3、Main.class我們編寫的代碼的啟動(dòng)入口類,使用spring-boot-maven-plugin打包成jar并用java -jar啟動(dòng)時(shí),這個(gè)類并不是真正應(yīng)用程序入口類Main-Class。
4、官方的代碼中controller和main函數(shù)寫在一個(gè)類中,因此可以不需要SpringBootApplication這個(gè)注解,寫在不同的類中就需要這個(gè)注解,否則掃描不到controller。通過(guò)源碼可以知道@SpringBootApplication = @SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan,它具有ComponentScan的作用,因此不需要像spring程序那樣顯式指定包掃描.
5、@EnableAutoConfiguration,這個(gè)注解后面代表的一系列功能是springboot的核心之一,自動(dòng)配置,這個(gè)注解解決了很多配置問(wèn)題。他的基本原理就是通過(guò)你的maven依賴來(lái)猜出你需要注入那些bean,它會(huì)幫你啟動(dòng)相關(guān)配置并注入這個(gè)bean。這里我們依賴了spring-boot-starter-web,它就會(huì)幫我們開啟springmvc相關(guān)的配置并自動(dòng)注入相關(guān)的必須的bean。因?yàn)闀?huì)自動(dòng)配置并注入,所以springboot程序的依賴管理很重要沒(méi)用的依賴盡量都去掉,特別是那些數(shù)據(jù)庫(kù)相關(guān)的依賴。關(guān)于springboot的自動(dòng)配置,這個(gè)是重點(diǎn)之一,后面細(xì)說(shuō)。
6、@RestController = @Controller + @@ResponseBody,也是一個(gè)復(fù)合注解,減少代碼量,類似的還有@GetMapping、@PostMapping等等。
上面這六點(diǎn),1-3可以通過(guò)maven相關(guān)的知識(shí)更進(jìn)一步了解,具體就是maven依賴管理以及maven打包,本人沒(méi)有系統(tǒng)的學(xué)習(xí),知識(shí)簡(jiǎn)單了解,所以這里就不細(xì)說(shuō)了。4-6在后續(xù)的springboot學(xué)習(xí)中會(huì)慢慢學(xué)習(xí)到。
運(yùn)行程序可以直接在Main上運(yùn)行java application作為普通java程序運(yùn)行,這時(shí)候Main中的main函數(shù)就是真正的啟動(dòng)函數(shù)。這里是使用嵌入式tomcat作為servlet容器來(lái)運(yùn)行servlet程序,所以并不需要我們部署到tomcat。
紅色標(biāo)記的就是已經(jīng)掃描到了并初始化成功了HelloWorldController。
打開瀏覽器請(qǐng)求 http://localhost:8080/hello 可以看到運(yùn)行結(jié)果
如果運(yùn)行出現(xiàn)這種問(wèn)題
The Bean Validation API is on the classpath but no implementation could be found
那么請(qǐng)刪除下springboot相關(guān)的本地jar包,有時(shí)候jar包下載會(huì)抽風(fēng)。本身springmvc里面是依賴有hibernate-validator作為參數(shù)校驗(yàn)的(@Valid @Validated使用),是不應(yīng)該出現(xiàn)這個(gè)問(wèn)題的。
如果你想打包部署,因?yàn)橐昧藄pring-boot-maven-plugin,所以直接運(yùn)行 mvn clean package就可以打包,最后打包的target是一個(gè)fat-jar,也就是包含了所有依賴的可運(yùn)行jar包。
打包好后,在路徑下命令行輸入 java -jar main-1.0.0.jar 就可以啟動(dòng)
你可以把 java -jar main-1.0.0.jar 寫到腳本文件sh or bat中,這樣就可以作為一個(gè)簡(jiǎn)單的啟動(dòng)腳本,然后和jar一起發(fā)送到目標(biāo)機(jī)器上,運(yùn)行啟動(dòng)腳本啟動(dòng)程序,這樣就差不多就算是完成了一次簡(jiǎn)單的springboot程序的部署發(fā)布。
把這個(gè)打包好的jar解壓下,簡(jiǎn)單看下結(jié)構(gòu)
BOOT-INF是應(yīng)用程序的主體,classes下面的就是我們的寫的代碼,lib里面的就是是我們的程序依賴的jar包
META-INF是一些基礎(chǔ)數(shù)據(jù),其中比較重要的就是MANIFEST.MF
Manifest-Version: 1.0 Implementation-Title: main Implementation-Version: 1.0.0 Archiver-Version: Plexus Archiver Built-By: pengrui Implementation-Vendor-Id: pr.study.springboot Spring-Boot-Version: 1.5.8.RELEASE Implementation-Vendor: Pivotal Software, Inc. Main-Class: org.springframework.boot.loader.JarLauncher Start-Class: pr.study.springboot.Main Spring-Boot-Classes: BOOT-INF/classes/ Spring-Boot-Lib: BOOT-INF/lib/ Created-By: Apache Maven 3.3.9 Build-Jdk: 1.8.0_111 Implementation-URL: http://projects.spring.io/spring-boot/main/
這個(gè)文件描述了jar的基本結(jié)構(gòu)
Main-Class:通過(guò)java -jar 啟動(dòng)時(shí)應(yīng)用程序啟動(dòng)的真正主類,java程序可以有多個(gè)main函數(shù),但是這個(gè)類中的main函數(shù)的第一個(gè)啟動(dòng)的函數(shù)
Start-Class:我們的springboot程序啟動(dòng)的類,直接運(yùn)行main方法時(shí),這個(gè)類中的main函數(shù)最先運(yùn)行,通過(guò) java -jar 運(yùn)行時(shí),這個(gè)類中main并不是最先運(yùn)行的,只是從這個(gè)類開始,我們的寫的那部分代碼才開始運(yùn)行
Spring-Boot-Classes:我們寫的代碼存放的路徑
Spring-Boot-Lib:我們的依賴包存放的路徑
關(guān)于JarLauncher以及org.springframework.boot.loader.*里面的內(nèi)容,我還沒(méi)有研究過(guò),這個(gè)后續(xù)再細(xì)說(shuō)。
到這里,一個(gè)簡(jiǎn)單的springboot程序的編碼、本地測(cè)試運(yùn)行、打包、啟動(dòng)就都簡(jiǎn)單過(guò)了一遍,后面再一個(gè)個(gè)補(bǔ)充豐滿。
代碼相關(guān):
https://gitee.com/page12/stud...
https://github.com/page12/stu...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/70645.html
摘要:一概括,如果使用開發(fā)一個(gè)的應(yīng)用創(chuàng)建一個(gè)項(xiàng)目并且導(dǎo)入相關(guān)包。創(chuàng)建一個(gè)編寫一個(gè)控制類需要一個(gè)部署應(yīng)用的服務(wù)器如,特點(diǎn)設(shè)計(jì)目的是用來(lái)簡(jiǎn)化新應(yīng)用的初始搭建以及開發(fā)過(guò)程。啟動(dòng)器可以和位于同一個(gè)包下,或者位于的上一級(jí)包中,但是不能放到的平級(jí)以及子包下。 一,Spring Boot 介紹 Spring Boot不是一個(gè)新的框架,默認(rèn)配置了多種框架使用方式,使用SpringBoot很容易創(chuàng)建一個(gè)獨(dú)立運(yùn)...
摘要:代碼如下可以看到中一共有個(gè)依賴,其中只有是我手動(dòng)加入的,用于單元測(cè)試。點(diǎn)擊項(xiàng)目啟動(dòng)按鈕,效果如下好的程序必須配備完善的單元測(cè)試。測(cè)試結(jié)果如下可以看到紅圈框住的地方,出現(xiàn)這個(gè)綠色標(biāo)志證明單元測(cè)試沒(méi)問(wèn)題。 微信公眾號(hào):一個(gè)優(yōu)秀的廢人如有問(wèn)題或建議,請(qǐng)后臺(tái)留言,我會(huì)盡力解決你的問(wèn)題。 前言 哎呦喂,按照以往的慣例今天周六我的安排應(yīng)該是待在家學(xué)學(xué)貓叫啥的。但是今年這種日子就可能一去不復(fù)返了,沒(méi)...
摘要:中添加攔截器配置如下攔截所有請(qǐng)求,也就是,只攔截開頭的請(qǐng)求。在中并沒(méi)有提供配置文件的方式來(lái)配置攔截器,因此需要使用的代碼式配置,配置如下這個(gè)屬性通常并不需要手動(dòng)配置,高版本的會(huì)自動(dòng)檢測(cè)第四點(diǎn)講下靜態(tài)資源映射。 以下內(nèi)容,如有問(wèn)題,煩請(qǐng)指出,謝謝 上一篇講解了springboot的helloworld部分,這一篇開始講解如何使用springboot進(jìn)行實(shí)際的應(yīng)用開發(fā),基本上尋著sprin...
摘要:在年下旬開源了一款新的工具,可以輕松地將應(yīng)用程序容器化。由于默認(rèn)訪問(wèn)谷歌的倉(cāng)庫(kù),而國(guó)內(nèi)訪問(wèn)不穩(wěn)定會(huì)經(jīng)常導(dǎo)致網(wǎng)絡(luò)超時(shí),所以筆者使用了國(guó)內(nèi)的阿里云鏡像服務(wù),那么就不需要訪問(wèn)谷歌的倉(cāng)庫(kù)了。執(zhí)行完成后,我們可以在阿里云鏡像倉(cāng)庫(kù)獲取鏡像。 原文地址:梁桂釗的博客博客地址:http://blog.720ui.com 歡迎關(guān)注公眾號(hào):「服務(wù)端思維」。一群同頻者,一起成長(zhǎng),一起精進(jìn),打破認(rèn)知的局限性。...
閱讀 1776·2021-10-11 10:57
閱讀 2366·2021-10-08 10:14
閱讀 3405·2019-08-29 17:26
閱讀 3366·2019-08-28 17:54
閱讀 3035·2019-08-26 13:38
閱讀 2914·2019-08-26 12:19
閱讀 3620·2019-08-23 18:05
閱讀 1289·2019-08-23 17:04