SpringBoot之旅第一篇-初探-創(chuàng)新互聯(lián)

目錄

成都創(chuàng)新互聯(lián)主營(yíng)武宣網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP開(kāi)發(fā),武宣h5成都小程序開(kāi)發(fā)搭建,武宣網(wǎng)站營(yíng)銷(xiāo)推廣歡迎武宣等地區(qū)企業(yè)咨詢

一、SpringBoot是什么?
二、SpringBoot的優(yōu)勢(shì)
三、hello world
四、原理探究

一、SpringBoot是什么?

微服務(wù),應(yīng)該是近年來(lái)最火的概念,越來(lái)越多的公司開(kāi)始使用微服務(wù)架構(gòu),面試中被問(wèn)到的微服務(wù)的概率很高,不管對(duì)技術(shù)的追求,還是為了進(jìn)更好的公司,微服務(wù)都是我們開(kāi)發(fā)人員的必須要學(xué)習(xí)的知識(shí)。

那么微服務(wù)究竟是什么呢?

我們通俗的理解方式就是:微服務(wù)化的核心就是將傳統(tǒng)的一站式應(yīng)用,根據(jù)業(yè)務(wù)拆分成一個(gè)一個(gè)的服務(wù),徹底 地去耦合,每一個(gè)微服務(wù)提供單個(gè)業(yè)務(wù)功能的服務(wù),一個(gè)服務(wù)做一件事,從技術(shù)角度看就是一種小而獨(dú)立的處理過(guò)程,類(lèi)似進(jìn)程概念,能夠自行單獨(dú)啟動(dòng)或銷(xiāo)毀,擁有自己獨(dú)立的數(shù)據(jù)庫(kù)。

想要更好的了解微服務(wù)概念的同學(xué)可以去看看這篇論文:https://martinfowler.com/articles/microservices.html

dubbo和springcloud

目前比較成熟的微服務(wù)架構(gòu)有兩種:dubbo和springcloud,這兩種技術(shù)各有優(yōu)劣,他們大的區(qū)別是:SpringCloud拋棄了Dubbo的RPC通信,采用的是基于HTTP的REST方式

為何會(huì)選擇springcloud,主要是從兩個(gè)方面考慮:

spring全家桶:作為Spring的拳頭項(xiàng)目,springcloud能夠與Spring Framework、Spring Boot、Spring Data、Spring Batch等其他Spring項(xiàng)目完美融合,而且springcloud有一整套的微服務(wù)架構(gòu)解決方案,你可以很放心的使用,大家都愛(ài)全家桶。

社區(qū)支持與更新力度:DUBBO停止了5年左右的更新,雖然2017.7重啟了,但是影響還是有一些的。

當(dāng)然,這只是一種技術(shù)選擇,不需要去爭(zhēng)論。

講了這么多,還沒(méi)有說(shuō)到主題,那springboot又是什么?SpringBoot專(zhuān)注于快速方便的開(kāi)發(fā)單個(gè)個(gè)體微服務(wù),SpringBoot可以離開(kāi)SpringCloud獨(dú)立使用開(kāi)發(fā)項(xiàng)目,但是SpringCloud離不開(kāi)SpringBoot,屬于依賴的關(guān)系,SpringBoot專(zhuān)注于快速、方便的開(kāi)發(fā)單個(gè)微服務(wù)個(gè)體,SpringCloud關(guān)注全局的服務(wù)治理框架。

要學(xué)習(xí)springcloud,就必須先學(xué)習(xí)springboot。

回到頂部
二、SpringBoot的優(yōu)勢(shì)

Spring Boot是來(lái)簡(jiǎn)化Spring應(yīng)用開(kāi)發(fā),約定大于配置,去繁從簡(jiǎn),just run就能創(chuàng)建一個(gè)獨(dú)立的,產(chǎn)品級(jí)別的應(yīng)用,多數(shù)Spring Boot應(yīng)用需要很少的Spring配置。

用過(guò)spring開(kāi)發(fā)就知道,spring配置繁多、開(kāi)發(fā)效率低下、部署流程復(fù)雜、且第三方技術(shù)集成難度大。而使用springboot有如下優(yōu)勢(shì):

1、快速創(chuàng)建獨(dú)立運(yùn)行的Spring項(xiàng)目以及與主流框架集成。

2、使用嵌入式的Servlet容器,應(yīng)用無(wú)需打成WAR包 。

3、starters自動(dòng)依賴與版本控制 。

4、大量的自動(dòng)配置,簡(jiǎn)化開(kāi)發(fā),也可修改默認(rèn)值。

5、 無(wú)需配置XML,無(wú)代碼生成,開(kāi)箱即用。

6、準(zhǔn)生產(chǎn)環(huán)境的運(yùn)行時(shí)應(yīng)用監(jiān)控。

7、與云計(jì)算的天然集成。

學(xué)習(xí)spring是有一定前提的,spring,maven都必須先掌握

回到頂部
三、hello world

相信大部分開(kāi)發(fā)現(xiàn)在都是使用idea,關(guān)于idea的maven配置就不講了,我們開(kāi)始第一個(gè)springboot項(xiàng)目

新建項(xiàng)目:
SpringBoot之旅第一篇-初探

下一步:
SpringBoot之旅第一篇-初探

下一步:
SpringBoot之旅第一篇-初探

下一步:
SpringBoot之旅第一篇-初探

只勾選web,這里我們就構(gòu)建成功了,再刪除一些不必要的文件,最終結(jié)構(gòu):
SpringBoot之旅第一篇-初探

新建一個(gè)controller:

SpringBoot之旅第一篇-初探

代碼:

@Controller
public class HelloController {

    @ResponseBody
    @RequestMapping("/hello")
    public String hello(){
        return "hello world";
    }
}

啟動(dòng)項(xiàng)目:
SpringBoot之旅第一篇-初探

成功后,瀏覽器中輸入:http://localhost:8080/hello
SpringBoot之旅第一篇-初探

結(jié)果就出來(lái)了,簡(jiǎn)直太方便了,springboot不僅開(kāi)發(fā)簡(jiǎn)單,部署也非常容易,直接打包

SpringBoot之旅第一篇-初探

打包后的文件:

SpringBoot之旅第一篇-初探

復(fù)制到桌面,然后直接執(zhí)行命令 java -jar
SpringBoot之旅第一篇-初探

刷新剛剛的地址,成功顯示,就已經(jīng)部署完成。
四、原理探究
我們先簡(jiǎn)單的探究下其中的原理,首先我們看pom包

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.3.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

進(jìn)入依賴,發(fā)現(xiàn)他還有一個(gè)父依賴

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.1.3.RELEASE</version>
    <relativePath>../../spring-boot-dependencies</relativePath>
</parent>

在父依賴中我們可以看到里面對(duì)組件的版本號(hào)進(jìn)行了寫(xiě)入:
SpringBoot之旅第一篇-初探

我們默認(rèn)是不需要寫(xiě)版本的,當(dāng)然,沒(méi)有在里面的依賴需要我們定義,這就是springboot的版本仲裁中心

再看另外的一個(gè)依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

這個(gè)依賴可以分為兩個(gè)部分:spring-boot-starter說(shuō)明這個(gè)是spring-boot場(chǎng)景啟動(dòng)器,而后面的web會(huì)幫我們導(dǎo)入了web模塊正常運(yùn)行所依賴的組件,如:
SpringBoot之旅第一篇-初探

Spring Boot將所有的功能場(chǎng)景都抽取出來(lái),做成一個(gè)個(gè)的starters(啟動(dòng)器),只需要在項(xiàng)目里面引入這些starter相關(guān)場(chǎng)景的所有依賴都會(huì)導(dǎo)入進(jìn)來(lái)。要用什么功能就導(dǎo)入什么場(chǎng)景的啟動(dòng)器。

我們?cè)诳纯粗鞒绦蝾?lèi)

@SpringBootApplication //來(lái)標(biāo)注一個(gè)主程序類(lèi),說(shuō)明這是一個(gè)Spring Boot應(yīng)用
public class SpringbootLearnApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootLearnApplication.class, args);
    }
}

@SpringBootApplication: Spring Boot應(yīng)用標(biāo)注在某個(gè)類(lèi)上說(shuō)明這個(gè)類(lèi)是SpringBoot的主配置類(lèi),SpringBoot就應(yīng)該運(yùn)行這個(gè)類(lèi)的main方法來(lái)啟動(dòng)SpringBoot應(yīng)用,進(jìn)入其中

@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 {

這里面有個(gè)@SpringBootConfiguration: 翻譯過(guò)來(lái)是Spring Boot的配置類(lèi),標(biāo)注在某個(gè)類(lèi)上,就表示這是一個(gè)Spring Boot的配置類(lèi)。

我們?cè)龠M(jìn)入其中,又可以看到一個(gè)注解@Configuration: 翻譯過(guò)來(lái)是配置類(lèi),上面標(biāo)注這個(gè)注解說(shuō)明這是一個(gè)配置類(lèi),相當(dāng)于一個(gè)配置文件,配置類(lèi)也是容器中的一個(gè)組件相當(dāng)于@Component。

還有一個(gè)@EnableAutoConfiguration 這個(gè)注解說(shuō)明開(kāi)啟自動(dòng)配置功能。這就是為什么我們不需要寫(xiě)任何配置,就可以起項(xiàng)目的原因,以前我們需要配置的東西,Spring Boot幫我們自動(dòng)配置;@EnableAutoConfiguration告訴SpringBoot開(kāi)啟自動(dòng)配置功能,這樣自動(dòng)配置才能生效。

我們不妨再進(jìn)入到這個(gè)注解中:

@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {

這里面@AutoConfigurationPackage ,翻譯過(guò)來(lái)就是自動(dòng)配置包,我們?cè)俚嚼锩嫒タ纯?,又有一個(gè)注解

@Import({Registrar.class})
public @interface AutoConfigurationPackage {
}

這個(gè)注解我們就比較熟悉了,@Import 這個(gè)注解是給容器中導(dǎo)入一個(gè)組件;導(dǎo)入的組件由Registrar.class,這個(gè) Registrar.class中的方法的就是將所在包及下面所有子包里面的所有組件掃描到Spring容器。

這個(gè)要注意必須是其子包,如果我們放在外面將不能被掃描,用個(gè)例子說(shuō)明,假設(shè)我們?cè)趈ava路徑下增加一個(gè)類(lèi),

SpringBoot之旅第一篇-初探

@Controller
public class HelloWorld {
    @ResponseBody
    @RequestMapping("/world")
    public String world(){
        return "hello world";
    }
}

再次啟動(dòng),是找不到這個(gè)地址的,因?yàn)檫@個(gè)包沒(méi)有掃入其中,這樣我們就明白了包是怎么掃描進(jìn)去的。

下面我們?cè)俚紷EnableAutoConfiguration 找到@Import({AutoConfigurationImportSelector.class}),

EnableAutoConfigurationImportSelector 翻譯過(guò)來(lái)是導(dǎo)入哪些組件的選擇器,這個(gè)類(lèi)的作用是:將所有需要導(dǎo)入的組件以全類(lèi)名的方式返回,這些組件就會(huì)被添加到容器中。

public String[] selectImports(AnnotationMetadata annotationMetadata) {

這個(gè)方法會(huì)給容器中導(dǎo)入非常多的自動(dòng)配置類(lèi)(xxxAutoConfiguration),就是給容器中導(dǎo)入這個(gè)場(chǎng)景需要的所有組件,并配置好這些組件。

這樣我們就知道自動(dòng)配置類(lèi)是如何導(dǎo)入的,有了自動(dòng)配置類(lèi),免去了我們手動(dòng)編寫(xiě)配置注入功能組件等的工作。
SpringBoot之旅第一篇-初探

去看這個(gè)文件,發(fā)現(xiàn)里面有大量的注解配置類(lèi):
SpringBoot之旅第一篇-初探

Spring Boot在啟動(dòng)的時(shí)候從類(lèi)路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值,將這些值作為自動(dòng)配置類(lèi)導(dǎo)入到容器中,自動(dòng)配置類(lèi)就生效,幫我們進(jìn)行自動(dòng)配置工作,以前我們需要自己配置的東西,自動(dòng)配置類(lèi)都幫我們。

這樣我們就對(duì)springboot的原理有個(gè)大致的了解,最重要的是springboot將我們之前要做的很多事情都做好了。

加Java架構(gòu)師進(jìn)階交流群獲取Java工程化、高性能及分布式、高性能、深入淺出。高架構(gòu)。
性能調(diào)優(yōu)、Spring,MyBatis,Netty源碼分析和大數(shù)據(jù)等多個(gè)知識(shí)點(diǎn)高級(jí)進(jìn)階干貨的直播免費(fèi)學(xué)習(xí)權(quán)限
都是大牛帶飛 讓你少走很多的彎路的 群號(hào)是: 558787436 對(duì)了 小白勿進(jìn) 最好是有開(kāi)發(fā)經(jīng)驗(yàn)

創(chuàng)新互聯(lián)www.cdcxhl.cn,專(zhuān)業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買(mǎi)多久送多久。

當(dāng)前文章:SpringBoot之旅第一篇-初探-創(chuàng)新互聯(lián)
路徑分享:http://muchs.cn/article4/phsie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、微信小程序云服務(wù)器、App設(shè)計(jì)、響應(yīng)式網(wǎng)站定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化