日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

springboot 替换tomcat_Spring Boot实战 之 解剖HelloWorld原型应用

發布時間:2025/3/20 javascript 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot 替换tomcat_Spring Boot实战 之 解剖HelloWorld原型应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:liuxiaopeng

鏈接:https://www.cnblogs.com/paddix/p/8116866.html

一、前言

   研究Spring boot也有一小段時間了,最近會將研究東西整理一下給大家分享,大概會有10~20篇左右的博客,整個系列會以一個簡單的博客系統作為基礎,因為光講理論很多東西不是特別容易理解,并且如果每次通過一個簡單的小程序也無法系統的把握好一些知識點,所以就以一個簡單的系統作為基礎來講,看看通過spring boot如何實現一個完整系統。本系列除了Spring boot基本的知識點之外,還會涉及到Spring boot與數據庫、緩存(redis)、消息隊列等的結合以及多實例部署等方面的內容。有興趣的同學可以關注一下。

二、Spring boot 簡介

  Spring boot 從名稱上就可以看出,它是基于Spring的一個框架,所以不熟悉Spring的同學還是得先去學習一下Spring。其次,Spring boot幫我們集成很多常用的功能,使得整個配置更加簡單。用過Spring的同學應該知道,雖然Spring一直在努力的減少配置的復雜性,但是,配置一個完全可用的(web)環境還是挺麻煩的,比如需要配置日志、數據庫、緩存等,然后再配置tomcat,最后將程序發布到tomcat目錄下。而Spring boot則幫我們大大簡化了這個過程,它提供了很多starter,只要引入對應的jar包就可以了。例如,我們需要集成tomcat,只需要引入tomcat的starter即可:

????org.springframework.boot????spring-boot-starter-tomcat

  備注:本文的例子都是基于Maven來實現的,所以如果不熟悉Maven,可以先去看下怎么用,如果熟悉gradle的話,也可以根據情況對配置做相應調整。

  我們可以從官方文檔上查看Spring boot提供的starter:

  這里我只截取了一小部分,可以看到Spring boot支持緩存、批處理、mq、es等等,完整的列表參考官方文檔。其他就不多解釋了,后續通過示例來講解整個Spring boot功能,我們先看Spring boot來如何實現一個web版的Hello World!

三、Hello World程序

  3.1 Hello World 源碼

  第一步:導入jar包

???????org.springframework.boot???????spring-boot-starter-parent???????1.5.8.RELEASE????????????????????????org.springframework.boot???????????spring-boot-starter-web??????????

  第二步:編寫控制器類  

package?com.pandy.blog;?import?org.springframework.stereotype.Controller;import?org.springframework.web.bind.annotation.RequestMapping;import?org.springframework.web.bind.annotation.ResponseBody;?import?java.util.HashMap;import?java.util.Map;?@Controllerpublic?class?HelloWorld {????@RequestMapping("/hello")????@ResponseBody????public?Map hello() {????????Map map =?new?HashMap<>();????????map.put("hello",?"world");????????return?map;????}}

  第三步:編寫啟動類(入庫)

package?com.pandy.blog;?import?org.springframework.boot.SpringApplication;import?org.springframework.boot.autoconfigure.SpringBootApplication;?@SpringBootApplicationpublic?class?Application {?????public?static?void?main(String[] args)?throws?Exception {????????SpringApplication.run(Application.class, args);????}}

 運行該類的main方法,然后訪問http://localhost:8080/hello,就可以看到如下結果:

  是不是感覺很開心?一行配置都沒有,就可以直接運行一個Web應用。不過開心完以后有沒有想過這是怎么實現的呢?接下來我們一行一行解析上面的代碼,雖然行數不多,但是還是有很多東西值得我們去學習和理解的。

  3.2 pom文件分析

  我們先從pom文件入手,pom文件里面只引入了兩個依賴項。第一個是spring-boot-starter-parent,熟悉Maven的朋友應該知道,Maven也可以跟類一樣,從父pom文件中繼承配置。我們可以看下spring-boot-starter-parent的pom文件,由于篇幅問題,這里面只看兩部分,其他東西比較容易理解,大家可以自己讀一下。第一個部分是:

  該文件又繼承了另一個pom文件,即spring-boot-dependencies,這個文件其實就是包含了一大堆的jar,其作用是統一管理spring boot所依賴的jar包的版本,所以之后大家可以看到,各個組件里面引入jar的時候就不再需要再指定版本號了。另一個地方需要說明一下是配置文件的管理:

  大家可以看到,默認情況下會將/src/main/resources目錄下的文件作為資源文件加入到classpath下,另外,這個地方的僅僅對application*.yml,application*.yaml,application*.properties三種文件進行過濾。這個過濾是指什么呢?大家配置過spring mvc的人應該都知道,配置數據庫時,我們通常將數據庫的信息配置在一個properties文件中,然后在spring的配置文件中通過 的形式引入,這個filter的作用就是在編譯的時候將配置文件中配置的名值對替換到spring的配置文件中${xxx}字符,但這個功能不是必要的,即使不進行替換,Spring也能在運行時讀取到配置項。

  總結一下:spring-boot-starter-parent的作用::

  1)jar包的版本管理。

  2)配置文件的過濾。

  3)常用插件管理。

  spring-boot-starter-parent最核心的功能是管理了Spring boot所依賴的所有jar包。不過通parent的方式有一個很明顯的問題,很多公司自己有自己的parent文件,而maven是沒辦法配置多個parent的。如果不使用spring-boot-starter-parent,那應該怎么做??實際上Spring boot提供了另一種方式來解決這個問題,就是在自己的pom文件中加入spring boot的依賴的管理:

?????????????????????????org.springframework.boot????????????spring-boot-dependencies????????????1.5.9.RELEASE????????????pom????????????import????????????

  其實從上面的分析可以看到,這個也是spring-boot-starter-parent 的pom文件的parent,而這個pom文件里面主要就是管理了一大堆的jar包版本。所以導入這個后,就不需要自己再去做版本管理,各個starter會自己根據需要導入對應的jar,但版本號由spring-boot-dependencies統一管理。但是這樣的話,spring-boot-starter-parent中的插件就無法使用,并且默認配置文件的過濾功能也沒有了。不過這沒什么影響,一方面這些功能不是必須的,另一方面如果需要,自己添加也是件很容易的事情。  

  3.3 HelloWorld類解析:

  我們再看下HelloWorld這個類,用過Spring mvc應該知道,其實這個類跟Spring boot沒半毛錢關系,業務代碼更是沒任何跟spring相關的東西,這也是spring一直奉行的一個原則,侵入性極小,這也是Spring成功的一個主要原因。這個類里面跟spring相關的是三個注解,即@Controller,@RequestMapping,@ResponseBody,但是這三個注解也都是Spring mvc提供的。跟Spring boot沒有太多聯系,在這我就不細講了,如果不是很清楚,可以去看下Spring MVC的內容,三個注解的基本作用如下:

  • Controller:標識為一個控制器,spring會自動實例化該類。
  • RequestMapping:url映射。
  • ResponseBody:將返回結果自動轉換為json串。

  3.4 Application類解析

  最后我們看下Application這個類,你會發現這個類的東西更少,總共就一行有用的代碼,即SpringApplication.run(Application.class, args);這個方法的作用是加載Application這個類,那Application這個類有什么特別之處嗎?可以看一下,其實這個類的唯一特殊的地方是一個注解@SpringBootApplication,所以Spring boot的運行肯定跟這個注解有著諸多的聯系,我們可以看下這個注解的源碼:

@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = {????????@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),????????@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })public?@interface?SpringBootApplication { ……

  該注解的主要方法就不說了,大家看下就知道,主要是為上面這些注解提供別名。該注解上前四個注解(@Target(ElementType.TYPE),@Retention(RetentionPolicy.RUNTIME),@Documented,@Inherited)大家應該都知道,不熟悉的朋友自己去看下JDK如何實現自定義的注解。我們詳細解釋一下后面三個注解:@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan。

  先看一下SpringBootConfiguration,這個注解比較簡單,源碼如下:

@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Configurationpublic?@interface?SpringBootConfiguration {}

  這個注解僅僅是繼承了@Configuration,大家應該知道,Spring提供三種方式的配置:(1)xml文件配置(2)annotation配置(3)Java 類配置。而@Configuration就是用于標識一個類為配置類的注解。Spring 4以后比較推崇通過Java類的方式來進行配置,所以Spring boot也傾向于這種方配置式。并且從源碼可以看出,SpringBootConfiguration的作用就是標識類為配置類。

  接下來我們看一下@EnableAutoConfiguration注解,這個注解的源碼有點復雜,在這不做細講,后面的文章再詳細解析其實現方式。這里說一下該注解的作用,它的主要功能是實現自動配置,什么叫做自動配置?就是Spring boot會根據你引入的jar包做一些自動的配置,例如,在classpath有HSQLDB的jar,spring boot就會自動給你配置一個內存數據庫。在這個例子里面我們也可以看到,因為我們引入了Spring-mvc、tomcat等相關的jar,spring boot就會猜測你是一個web工程,然后就會自動做一些spring mvc的配置,比如對靜態資源的支持、將返回結果自動轉為json格式數據的支持等。這些都是自動配置的結果。對Spring Enable*注解熟悉的同學應該能夠更容易理解這個注解,因為Spring中有很多類似的注解。

  最后我們再看下@ComponentScan,這個注解不是Spring boot提供的,而是Spring提供的,Spring掃描的包或類,即哪些包和類會自動納入Spring IoC容器的管理,IoC根據配置對這些類進行實例化。

  現在我們再總結一下SpringBootConfiguration這個注解的作用:

1)標志該類為一個配置類。  

2)指定掃描的包,便于Spring IoC容器對其進行實例和生命周期的管理。  

3)自動配置,通過引入的jar包,猜測用戶的意圖進行自動化配置。

四、總結

  本文詳細分析了Spring boot實現的一個web版的Hello World,通過這個例子,我們了解了Spring boot的基本操作,并通過對每行的代碼的分析,對Spring boot的原理有了一個大致的了解。總體來講,Spring boot 統一管理了jar包,然后會根據我們選擇的starter來進行自動化配置,通過這種方式來解決復雜的依賴管理,精簡配置,從而使得開發者能夠更加專注于自己的業務,而不需要做那些很復雜的配置工作。同時,Spring boot這種快速、輕量級的服務也非常適合微服務架構,這個后續有機會再跟大家分享,歡迎繼續關注。

總結

以上是生活随笔為你收集整理的springboot 替换tomcat_Spring Boot实战 之 解剖HelloWorld原型应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 无码视频在线观看 | 国产白浆视频 | 你懂的网址在线观看 | 国产91传媒 | www.国产精品.com | www.夜夜爽| 观看av免费 | 久久国产精品精品国产色婷婷 | 精品国产乱码久久久久久浪潮 | 后进极品美女圆润翘臀 | 波多野结衣在线一区二区 | 97爱爱视频| 美女羞羞动态图 | 91激情捆绑调教喷水 | 香蕉成人网 | 国产三级三级三级三级三级 | 亚洲妇女无套内射精 | 波多野结衣av中文字幕 | 中国少妇乱子伦视频播放 | 女同另类之国产女同 | 夜夜夜综合 | 色视频免费 | av天天草| 国内自拍偷拍视频 | 日韩欧美黄色片 | 高清久久久 | 国产美女在线免费观看 | 在线观看午夜 | www.chengren| 在线观看av国产一区二区 | 香蕉视频日本 | 97视频免费 | 一级大片免费观看 | 免费裸体视频网站 | 亚洲激情图 | 在线观看亚洲大片短视频 | 国产麻豆免费观看 | 超碰个人在线 | 青青草原成人网 | 黄色大片在线免费观看 | 尹人综合网| 超碰97人人干 | 丁香六月激情综合 | 亚洲欧美日韩精品 | 国产视频在线免费观看 | 免费在线一区二区三区 | 极品尤物魔鬼身材啪啪仙踪林 | www.色在线 | av黄色免费 | xxxx国产视频 | www.精品一区| 激情六月婷| 超碰中文字幕在线 | 精品少妇白浆小泬60P | 国产高清视频一区 | 少妇精品偷拍高潮白浆 | 亚洲我射av | 国产精品18久久久久久vr下载 | 天天操综合网 | 国产午夜精品一区二区理论影院 | av不卡一区二区 | 精品乱人伦一区二区三区 | 日韩av在线播放一区 | 亚洲少妇一区二区 | 毛片网站视频 | www五月天com| 天天看夜夜看 | 中文字幕69 | 国产白丝一区二区三区 | 国产拍拍拍 | 亚洲av成人无码网天堂 | 极品久久久久久 | av大片在线观看 | 黄色成人在线免费观看 | 日韩欧美少妇 | 福利在线免费视频 | 久久成人人人人精品欧 | 色欲狠狠躁天天躁无码中文字幕 | 91看毛片 | 日韩精品电影一区二区三区 | 中文字幕一区二区精品 | 国产一极片| 日韩av资源站 | 超碰在线亚洲 | 操操操视频| 精品国产av鲁一鲁一区 | 在线观看国产91 | 一区二区三区欧美在线 | 免费视频网站在线观看入口 | 久久久久国产精品人妻 | 麻豆精品国产 | 好吊日在线观看 | 国产黄色免费看 | 日韩精品中文在线 | 国产亚洲制服欧洲高清一区 | aaa在线| 大肉大捧一进一出视频 | 国产又粗又黄又爽视频 | 日韩簧片在线观看 |