spring-boot入門程式詳解
1.建立一個普通的maven
專案,專案名為boot-learnning
2.在pom.xml
新增parent
依賴
org.springframework.boot spring-boot-starter-parent 2.0.0.RELEASE
3.在pom.xml
中的dependencies
中新增依賴
org.springframework.boot spring-boot-starter-web
由於在
parent
中已經指定了版本,所以在dependencies
中關於spring-boot
的依賴就不需要版本了,如果要引入其他的,仍然需要指定版本
4.編寫main
方法程式,用於啟動應用
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class App { public static void main( String[] args ) { SpringApplication.run(App.class, args); } }
直接執行
main
方法程式,就啟動了一個web
引用。spring-boot
中預設內嵌了tomcat
,所以只要執行主程式,就啟動了內嵌的tomcat
,並預設監聽8080
埠
5.編寫一個controller
,用於客戶端訪問
import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody; @Controllerpublic class IndexController { @RequestMapping("/index") @ResponseBody public String index() { return "Spring boot index Controller"; } }
瀏覽器中訪問,我們就能在瀏覽器中看到返回的內容
6.在pom.xml
中新增spring-boot
編譯外掛
org.springframework.boot spring-boot-maven-plugin
7.編譯打包
mvn clean compile package
編譯打包完成後,在專案的target
目錄下,就會生成一個jar
檔案
8.部署啟動
java -jar boot-learnning-0.0.1-SNAPSHOT.jar
啟動後,在瀏覽器中訪問,在瀏覽器中,就能看到
controller
返回的內容
9.依賴探究
我們在搭建環境的時候新增了父級依賴
org.springframework.boot spring-boot-starter-parent 2.0.0.RELEASE
而在spring-boot-starter-parent
中,也有一個父級依賴
org.springframework.boot spring-boot-dependencies 2.0.0.RELEASE ../../spring-boot-dependencies
在spring-boot-dependencies
中,properties
定義了我們常用的的元件版本,幫我們管理spring-boot
中需要的所有依賴
那麼在我們開發的過程中,我們在匯入spring-boot-dependencies
中已經宣告的依賴庫時,就不需要指定版本了,如果在spring-boot-dependencies
沒有指定,就需要我們來指定版本了
在dependencies
,我們依賴了spring-boot-starter-web
org.springframework.boot spring-boot-starter-web
spring-boot-starter
是spring-boot
的場景啟動器,幫我們管理匯入了web
模組正常執行所需要的依賴庫spring-boot
將所有的功能場景都抽取出來,做成一個個的starter
(啟動器),只需要在專案中引入這些starter
,相關場景的所有依賴都會自動匯入,我們需要使用什麼功能,就匯入相應的場景的啟動器依賴即可
10.主程式探究
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class App { public static void main( String[] args ) { SpringApplication.run(App.class, args); } }
@SpringBootApplication
標註在某個類上,說明這個類是spring-boot
應用的主配置類,spring-boot
就會透過這個類來啟動spring-boot
應用
SpringApplication
的run
方法中,第一個引數,就是一個使用@SpringBootApplication
的類,而這個類也可以不是當前main
方法所在的類
11.@SpringBootApplication
註解是一個組合註解
@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
應用的配置類@Configuration
標註一個類,使其成為一個配置類@EnableAutoConfiguration
開啟自動配置,表示原來我們使用spring
時,需要手動配置的東西,現在由spring-boot
幫我們自動配置,這個註解告訴spring-boot
開啟自動配置功能,是的自動配置功能生效
配置類 與 配置檔案是一樣的,而配置類也是容器中的一個元件
12.@EnableAutoConfiguration
探究
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@AutoConfigurationPackage@Import(AutoConfigurationImportSelector.class)public @interface EnableAutoConfiguration {
@AutoConfigurationPackage
自動配置包,它使用@Import(AutoConfigurationPackages.Registrar.class)
來完成所需的功能@Import
是spring
的一個底層註解,給容器中匯入一個元件;匯入的元件由AutoConfigurationPackages.Registrar.class
類指定AutoConfigurationPackages.Registrar.class
將主配置類(@SpringBootApplication
標註的類)的所在包,以及下面的所有子包裡面的所有元件掃描到spring
容器中@Import(AutoConfigurationImportSelector.class)
中的AutoConfigurationImportSelector.class
是一個確定匯入哪些元件的選擇器,將所有需要的元件以全類名的方式返回,然後將這些元件全部新增到容器中,還會給容器中匯入非常多的自動配置類,即向容器中匯入各個場景需要的所有元件,並且自動配置好這些元件
13.自動配置類
自動配置類,免去了我們手動編寫配置注入功能元件等工作
在AutoConfigurationImportSelector
的selectImports
方法中,呼叫了getCandidateConfigurations
方法獲取候選的配置檔案,使用了.SpringFactoriesLoader.loadFactoryNames(Class> factoryClass, @Nullable ClassLoader classLoader)
,其中,第一個引數就是EnableAutoConfiguration.class
,spring-boot
應用在啟動的時候,呼叫loadFactoryNames
方法從類路徑下的META-INF/spring.factories
獲取EnableAutoConfiguration
指定的值,將這些值作為自動配置類,匯入到容器中,自動配置類生效,幫我們進行自動配置工作,而這個檔案存在於spring-boot-autoconfigure-2.0.0.RELEASE.jar
中。
以前我們需要自己手動配置的東西,自動配置類都幫我們做了,spring-boot
底層中,關於spring-framework
中的東西,並沒有缺少或者省略,只不過是由自動配置類幫我們設定了,J2EE的整體解決方案的自動配置類,都在spring-boot-autoconfigure
中。
作者:心揚
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2318/viewspace-2809593/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 詳解HDFS入門
- lambda 的入門詳解
- Anaconda 使用入門詳解
- Python程式設計入門基礎語法詳解Python程式設計
- Solon詳解(一)- 快速入門
- Redis入門--進階詳解Redis
- Spring入門之IOC詳解Spring
- Logback 快速入門 / 使用詳解
- Flutter 入門 — Container 屬性詳解FlutterAI
- Vue入門—事件與方法詳解Vue事件
- 詳解安卓架構入門安卓架構
- 卡特蘭(Catalan)數入門詳解
- Go 中的 gRPC 入門詳解GoRPC
- Python程式設計入門——基礎語法詳解(經典)Python程式設計
- 詳解前端HTTP協議入門教程前端HTTP協議
- Next.js 入門超詳解教程JS
- 樹莓派入門操作流程詳解樹莓派
- Springboot mini - Solon詳解(一)- 快速入門Spring Boot
- Promise入門到精通(初級篇)-附程式碼詳細講解Promise
- 專題一之Spring Boot入門詳解Spring Boot
- 新手入門,webpack入門詳細教程Web
- 0001_01_Java程式入門_詳細筆記Java筆記
- webpack4.x最詳細入門講解Web
- gitbook 入門教程之常用命令詳解Git
- Springboot是什麼?Springboot詳解!入門介紹Spring Boot
- Python入門小專案-氣泡排序詳解Python排序
- Jaeger Client Go 鏈路追蹤|入門詳解clientGo
- spring-boot快速入門學習筆記-整合JPA mybatis rabbitmq mongodb redisSpringboot筆記MyBatisMQMongoDBRedis
- Java反射詳解:入門+使用+原理+應用場景Java反射
- 好程式設計師Python培訓分享入門之元組列表字典詳解程式設計師Python
- yarn詳細入門教程Yarn
- Netty入門程式Netty
- JAVA入門程式Java
- 小程式入門
- mybatis入門程式MyBatis
- Jmeter(八) - 從入門到精通 - JMeter配置元件(詳解教程)JMeter元件
- 大資料hadoop入門之hadoop家族產品詳解大資料Hadoop
- C#語言入門詳解(劉鐵錳)---泛型C#泛型