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