您好,登錄后才能下訂單哦!
簡化Spring
應用開發的一個框架、整個Spring
技術棧的一個大整合;
J2EE
開發的一站式解決方案;
優點:
快速創建獨立運行的Spring
項目以及與主流框架集成;
使用嵌入式的Servlet
容器,應用無需打成WAR
包;
starters
自動依賴與版本控制;
大量的自動配置,簡化開發,也可修改默認值;
無需配置XML
,無代碼生成,開箱即用;
準生產環境的運行時應用監控;
與云計算的天然集成;
martin fowler論文提出。
微服務:架構風格(服務微化)
一個應用應該是一組小型服務;可以通過HTTP
的方式進行互通;
單體應用:ALL IN ONE
微服務:每一個功能元素最終都是一個可獨立替換和獨立升級的軟件單元;
給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
。
實現功能:
瀏覽器發送
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>
結果:
父項目
<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
相關場景的所有依賴都會導入進來。要用什么功能就導入什么場景的啟動器。
@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
;?
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!"; ????} }
?
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。