spring boot入門,看這篇文章就夠了
一、SpringBoot入門
1、基本介紹
- 簡化
Spring
應用開發的一個框架、整個Spring
技術棧的一個大整合; J2EE
開發的一站式解決方案;
優點:
- 快速建立獨立執行的
Spring
專案以及與主流框架整合; - 使用嵌入式的
Servlet
容器,應用無需打成WAR
包; starters
自動依賴與版本控制;- 大量的自動配置,簡化開發,也可修改預設值;
- 無需配置
XML
,無程式碼生成,開箱即用; - 準生產環境的執行時應用監控;
- 與雲端計算的天然整合;
2、微服務
- martin fowler論文提出。
- 微服務:架構風格(服務微化)
- 一個應用應該是一組小型服務;可以通過
HTTP
的方式進行互通; - 單體應用:
ALL IN ONE
- 微服務:每一個功能元素最終都是一個可獨立替換和獨立升級的軟體單元;
3、MAVEN設定
給maven
的settings.xml
配置檔案的profiles
標籤新增下面的程式碼:
<profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile>
表示maven
使用jdk1.8
。
4、Spring Boot HelloWorld
實現功能:
瀏覽器傳送
hello
請求,伺服器接受請求並處理,響應Hello Springboot!
字串;即瀏覽器輸入localhost:8080/hello
可以看到瀏覽器顯示Hello SpringBoot!
字串;
① 建立一個maven
工程(jar
);
② 匯入spring boot
相關的依賴;
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring‐boot‐starter‐parent</artifactId> <version>1.5.9.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring‐boot‐starter‐web</artifactId> </dependency> </dependencies>
③ 編寫一個主程式,啟動Spring Boot
應用
/** * @SpringBootApplication 來標註一個主程式類,說明這是一個Spring Boot應用 */ @SpringBootApplication public class HelloWorldMainApplication { public static void main(String[] args) { // Spring應用啟動起來 SpringApplication.run(HelloWorldMainApplication.class, args); } }
④ 編寫相關的Controller
@Controller public class HelloController { @ResponseBody @RequestMapping("/hello") public String hello(){ return "Hello SpringBoot!"; } }
⑤ 執行主程式測試
⑥簡化部署
將這個應用打成jar
包,直接使用java-jar
的命令進行執行;
<!-- 這個外掛,可以將應用打包成一個可執行的jar包;--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
結果:
5、Hello World探究
(1)、Pom.xml檔案
父專案
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent>
他的父專案:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.5.9.RELEASE</version> <relativePath>../../spring-boot-dependencies</relativePath> </parent>
他來真正管理Spring Boot
應用裡面的所有依賴版本;
也就是Spring Boot
的版本仲裁中心;
以後我們匯入依賴預設是不需要寫版本;(沒有在dependencies
裡面管理的依賴自然需要宣告版本號)
啟動器:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
spring-boot-starter-web:
spring-boot-starter
:spring-boot
場景啟動器;幫我們匯入了web
模組正常執行所依賴的元件;
Spring Boot
將所有的功能場景都抽取出來,做成一個個的starters
(啟動器),只需要在專案裡面引入這些starter
相關場景的所有依賴都會匯入進來。要用什麼功能就匯入什麼場景的啟動器。
(2)、主程式類,主入口類
@SpringBootApplication public class HelloWorldMainApplication { public static void main(String[] args) { // Spring應用啟動起來 SpringApplication.run(HelloWorldMainApplication.class,args); } }
① @SpringBootApplication
: Spring Boot
應用標註在某個類上說明這個類是SpringBoot
的主配置類,SpringBoot
就應該執行這個類的main
方法來啟動SpringBoot
應用;這是一個組合註解。
@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
的配置類,標註在某個類上,表示這是一個Spring Boot
的配置類,裡面包含這個@Configuration
(也就是Spring
裡面的配置類);
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration public @interface SpringBootConfiguration { }
配置類 —–> 配置檔案;配置類也是容器中的一個元件:@Component
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component //元件註解 public @interface Configuration { @AliasFor( annotation = Component.class ) String value() default ""; }
② @EnableAutoConfiguration
:開啟自動配置功能;
以前我們需要配置的東西,Spring Boot
幫我們自動配置;@EnableAutoConfiguration
告訴SpringBoot
開啟自動配置功能,這樣自動配置才能生效;
@AutoConfigurationPackage @Import({AutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration { }
@AutoConfigurationPackage
:自動配置包@Import(AutoConfigurationPackages.Registrar.class)
:Spring
的底層註解@Import
,給容器中匯入一個元件;匯入的元件由AutoConfigurationPackages.Registrar.class
指定。 也就是: 將主配置類(@SpringBootApplication
標註的類)的所在包及下面所有子包裡面的所有元件掃描到Spring容器;,所以如果上面的controller
如果不是在主配置類所在的包(或者子包)下,就不能掃描到。
@Import(EnableAutoConfigurationImportSelector.class)
: 給容器中匯入元件(不在同一個包下面的)EnableAutoConfigurationImportSelector
:匯入哪些元件的選擇器;將所有需要匯入的元件以全類名的方式返回,這些元件就會被新增到容器中;會給容器中匯入非常多的自動配置類(xxxAutoConfiguration
);就是給容器中匯入這個場景需要的所有元件,並配置好這些元件;有了自動配置類,免去了我們手動編寫配置注入功能元件等的工作; 裡面的
getCandidateConfigurations
呼叫了下面的一個方法:SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader)
Spring Boot在啟動的時候從類路徑下的META-INF/spring.factories
中獲取EnableAutoConfiguration
指定的值,將這些值作為自動配置類匯入到容器中,自動配置類就生效,幫我們進行自動配置工作;以前我們需要自己配置的東西,自動配置類都幫我們;J2EE的整體整合解決方案和自動配置都在
spring-boot-autoconfigure-xxx.RELEASE.jar
;
6、使用Spring Initializer快速建立Spring Boot專案
IDE都支援使用Spring的專案建立嚮導快速建立一個Spring Boot專案。選擇我們需要的模組,嚮導會聯網建立Spring Boot專案,預設生成的Spring Boot專案; 主程式生成好了,我們只需要我們自己的邏輯。
resources
: 資料夾中目錄結構static
:儲存所有的靜態資源;js css images
;templates
:儲存所有的模板頁面;(Spring Boot預設jar
包使用嵌入式的Tomcat
,預設不支援JSP
頁 面);可以使用模板引擎(freemarker
、thymeleaf
);application.properties
:Spring Boot應用的配置檔案,可以修改一些預設設定;
結構目錄:
簡單Controller
,注意@RestController
註解。
package com.zxin.springboot.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; //@ResponseBody // 這個類的所有方法返回的資料直接寫給瀏覽器(如果是物件 -> 轉成json) //@Controller @RestController // 這個註解的作用和上面兩個一起的作用相同 (就是 ResponseBody和Controller的合體) public class HelloController { @ResponseBody //如果每個類都需要寫,麻煩 @RequestMapping("/hello") public String hello(){ return "hello quick SpringBoot!"; } }
原文:Java架構筆記
免費Java高階資料需要自己領取,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高併發分散式等教程,一共30G。
傳送門: https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT