您好,登錄后才能下訂單哦!
目錄
一、SpringBoot是什么?
二、SpringBoot的優(yōu)勢
三、hello world
四、原理探究
一、SpringBoot是什么?
微服務(wù),應(yīng)該是近年來最火的概念,越來越多的公司開始使用微服務(wù)架構(gòu),面試中被問到的微服務(wù)的概率很高,不管對技術(shù)的追求,還是為了進(jìn)更好的公司,微服務(wù)都是我們開發(fā)人員的必須要學(xué)習(xí)的知識。
那么微服務(wù)究竟是什么呢?
我們通俗的理解方式就是:微服務(wù)化的核心就是將傳統(tǒng)的一站式應(yīng)用,根據(jù)業(yè)務(wù)拆分成一個一個的服務(wù),徹底 地去耦合,每一個微服務(wù)提供單個業(yè)務(wù)功能的服務(wù),一個服務(wù)做一件事,從技術(shù)角度看就是一種小而獨立的處理過程,類似進(jìn)程概念,能夠自行單獨啟動或銷毀,擁有自己獨立的數(shù)據(jù)庫。
想要更好的了解微服務(wù)概念的同學(xué)可以去看看這篇論文:https://martinfowler.com/articles/microservices.html
dubbo和springcloud
目前比較成熟的微服務(wù)架構(gòu)有兩種:dubbo和springcloud,這兩種技術(shù)各有優(yōu)劣,他們最大的區(qū)別是:SpringCloud拋棄了Dubbo的RPC通信,采用的是基于HTTP的REST方式
為何會選擇springcloud,主要是從兩個方面考慮:
spring全家桶:作為Spring的拳頭項目,springcloud能夠與Spring Framework、Spring Boot、Spring Data、Spring Batch等其他Spring項目完美融合,而且springcloud有一整套的微服務(wù)架構(gòu)解決方案,你可以很放心的使用,大家都愛全家桶。
社區(qū)支持與更新力度:DUBBO停止了5年左右的更新,雖然2017.7重啟了,但是影響還是有一些的。
當(dāng)然,這只是一種技術(shù)選擇,不需要去爭論。
講了這么多,還沒有說到主題,那springboot又是什么?SpringBoot專注于快速方便的開發(fā)單個個體微服務(wù),SpringBoot可以離開SpringCloud獨立使用開發(fā)項目,但是SpringCloud離不開SpringBoot,屬于依賴的關(guān)系,SpringBoot專注于快速、方便的開發(fā)單個微服務(wù)個體,SpringCloud關(guān)注全局的服務(wù)治理框架。
要學(xué)習(xí)springcloud,就必須先學(xué)習(xí)springboot。
回到頂部
二、SpringBoot的優(yōu)勢
Spring Boot是來簡化Spring應(yīng)用開發(fā),約定大于配置,去繁從簡,just run就能創(chuàng)建一個獨立的,產(chǎn)品級別的應(yīng)用,多數(shù)Spring Boot應(yīng)用需要很少的Spring配置。
用過spring開發(fā)就知道,spring配置繁多、開發(fā)效率低下、部署流程復(fù)雜、且第三方技術(shù)集成難度大。而使用springboot有如下優(yōu)勢:
1、快速創(chuàng)建獨立運行的Spring項目以及與主流框架集成。
2、使用嵌入式的Servlet容器,應(yīng)用無需打成WAR包 。
3、starters自動依賴與版本控制 。
4、大量的自動配置,簡化開發(fā),也可修改默認(rèn)值。
5、 無需配置XML,無代碼生成,開箱即用。
6、準(zhǔn)生產(chǎn)環(huán)境的運行時應(yīng)用監(jiān)控。
7、與云計算的天然集成。
學(xué)習(xí)spring是有一定前提的,spring,maven都必須先掌握
回到頂部
三、hello world
相信大部分開發(fā)現(xiàn)在都是使用idea,關(guān)于idea的maven配置就不講了,我們開始第一個springboot項目
新建項目:
下一步:
下一步:
下一步:
只勾選web,這里我們就構(gòu)建成功了,再刪除一些不必要的文件,最終結(jié)構(gòu):
新建一個controller:
代碼:
@Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello(){
return "hello world";
}
}
啟動項目:
成功后,瀏覽器中輸入:http://localhost:8080/hello
結(jié)果就出來了,簡直太方便了,springboot不僅開發(fā)簡單,部署也非常容易,直接打包
打包后的文件:
復(fù)制到桌面,然后直接執(zhí)行命令 java -jar
刷新剛剛的地址,成功顯示,就已經(jīng)部署完成。
四、原理探究
我們先簡單的探究下其中的原理,首先我們看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)他還有一個父依賴
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
在父依賴中我們可以看到里面對組件的版本號進(jìn)行了寫入:
我們默認(rèn)是不需要寫版本的,當(dāng)然,沒有在里面的依賴需要我們定義,這就是springboot的版本仲裁中心
再看另外的一個依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
這個依賴可以分為兩個部分:spring-boot-starter說明這個是spring-boot場景啟動器,而后面的web會幫我們導(dǎo)入了web模塊正常運行所依賴的組件,如:
Spring Boot將所有的功能場景都抽取出來,做成一個個的starters(啟動器),只需要在項目里面引入這些starter相關(guān)場景的所有依賴都會導(dǎo)入進(jìn)來。要用什么功能就導(dǎo)入什么場景的啟動器。
我們在看看主程序類
@SpringBootApplication //來標(biāo)注一個主程序類,說明這是一個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)注在某個類上說明這個類是SpringBoot的主配置類,SpringBoot就應(yīng)該運行這個類的main方法來啟動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 {
這里面有個@SpringBootConfiguration: 翻譯過來是Spring Boot的配置類,標(biāo)注在某個類上,就表示這是一個Spring Boot的配置類。
我們再進(jìn)入其中,又可以看到一個注解@Configuration: 翻譯過來是配置類,上面標(biāo)注這個注解說明這是一個配置類,相當(dāng)于一個配置文件,配置類也是容器中的一個組件相當(dāng)于@Component。
還有一個@EnableAutoConfiguration 這個注解說明開啟自動配置功能。這就是為什么我們不需要寫任何配置,就可以起項目的原因,以前我們需要配置的東西,Spring Boot幫我們自動配置;@EnableAutoConfiguration告訴SpringBoot開啟自動配置功能,這樣自動配置才能生效。
我們不妨再進(jìn)入到這個注解中:
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
這里面@AutoConfigurationPackage ,翻譯過來就是自動配置包,我們再到里面去看看,又有一個注解
@Import({Registrar.class})
public @interface AutoConfigurationPackage {
}
這個注解我們就比較熟悉了,@Import 這個注解是給容器中導(dǎo)入一個組件;導(dǎo)入的組件由Registrar.class,這個 Registrar.class中的方法的就是將所在包及下面所有子包里面的所有組件掃描到Spring容器。
這個要注意必須是其子包,如果我們放在外面將不能被掃描,用個例子說明,假設(shè)我們在java路徑下增加一個類,
@Controller
public class HelloWorld {
@ResponseBody
@RequestMapping("/world")
public String world(){
return "hello world";
}
}
再次啟動,是找不到這個地址的,因為這個包沒有掃入其中,這樣我們就明白了包是怎么掃描進(jìn)去的。
下面我們再到@EnableAutoConfiguration 找到@Import({AutoConfigurationImportSelector.class}),
EnableAutoConfigurationImportSelector 翻譯過來是導(dǎo)入哪些組件的選擇器,這個類的作用是:將所有需要導(dǎo)入的組件以全類名的方式返回,這些組件就會被添加到容器中。
public String[] selectImports(AnnotationMetadata annotationMetadata) {
這個方法會給容器中導(dǎo)入非常多的自動配置類(xxxAutoConfiguration),就是給容器中導(dǎo)入這個場景需要的所有組件,并配置好這些組件。
這樣我們就知道自動配置類是如何導(dǎo)入的,有了自動配置類,免去了我們手動編寫配置注入功能組件等的工作。
去看這個文件,發(fā)現(xiàn)里面有大量的注解配置類:
Spring Boot在啟動的時候從類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值,將這些值作為自動配置類導(dǎo)入到容器中,自動配置類就生效,幫我們進(jìn)行自動配置工作,以前我們需要自己配置的東西,自動配置類都幫我們。
這樣我們就對springboot的原理有個大致的了解,最重要的是springboot將我們之前要做的很多事情都做好了。
加Java架構(gòu)師進(jìn)階交流群獲取Java工程化、高性能及分布式、高性能、深入淺出。高架構(gòu)。
性能調(diào)優(yōu)、Spring,MyBatis,Netty源碼分析和大數(shù)據(jù)等多個知識點高級進(jìn)階干貨的直播免費學(xué)習(xí)權(quán)限
都是大牛帶飛 讓你少走很多的彎路的 群號是: 558787436 對了 小白勿進(jìn) 最好是有開發(fā)經(jīng)驗
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。