一晴圾、SpringBoot介紹
1、SpringBoot簡(jiǎn)介
簡(jiǎn)化Spring應(yīng)用開(kāi)發(fā)的一個(gè)框架
整個(gè)Spring技術(shù)棧的一個(gè)大整合
J2EE開(kāi)發(fā)的一站式解決方案
2、微服務(wù)
微服務(wù)是一種架構(gòu)風(fēng)格,一個(gè)應(yīng)用應(yīng)該是一組小型服務(wù)嗓违,可以通過(guò)HTTP的方式進(jìn)行互通。
每一個(gè)功能元素最終都是一個(gè)可獨(dú)立替代和獨(dú)立升級(jí)的軟件單元知残。
與之相反的是單體應(yīng)用靠瞎,所有功能應(yīng)用都集成為一體比庄。
二求妹、使用maven創(chuàng)建SpringBoot項(xiàng)目
1、創(chuàng)建一個(gè)maven工程
2佳窑、導(dǎo)入Springboot依賴(lài)
<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>
3制恍、編寫(xiě)一個(gè)主程序:?jiǎn)?dòng)SpringBoot
package com.cerr;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//@SpringBootApplication標(biāo)注一個(gè)主程序類(lèi),說(shuō)明這是一個(gè)Springboot應(yīng)用
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
SpringApplication.run(HelloWorldMainApplication.class,args);
}
}
4神凑、編寫(xiě)Controller
package com.cerr.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloWorld {
@ResponseBody
@RequestMapping("/hello")
public String hello(){
return "hello world";
}
}
5净神、啟動(dòng)方式
有兩種啟動(dòng)的方式:
- 直接運(yùn)行啟動(dòng)類(lèi):運(yùn)行有標(biāo)注
@SpringBootApplication
的類(lèi) - 打包部署后,通過(guò)命令行來(lái)啟動(dòng)
下面我們來(lái)講解第二種方式:
6溉委、簡(jiǎn)化部署
導(dǎo)入maven插件
<!--可以將應(yīng)用打包成一個(gè)可執(zhí)行的jar包 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
然后就可以點(diǎn)擊下圖的package將這個(gè)應(yīng)用打包成jar包鹃唯,直接使用java -jar的命令進(jìn)行執(zhí)行:
在終端中使用java -jar命令啟動(dòng):
訪問(wèn):
三、對(duì)上述項(xiàng)目的探究
1瓣喊、POM文件
父項(xiàng)目:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
它的父項(xiàng)目來(lái)真正管理SpringBoot應(yīng)用的所有依賴(lài)版本:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
所以以后我們導(dǎo)入依賴(lài)默認(rèn)是不需要寫(xiě)版本的(沒(méi)有在dependencirs里面管理的依賴(lài)就需要寫(xiě)版本)
啟動(dòng)器:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
spring-boot-starter-web是Springboot的場(chǎng)景啟動(dòng)器坡慌,在其中幫我們導(dǎo)入了web模塊正常運(yùn)行所依賴(lài)的組件
SpringBoot將所有的功能場(chǎng)景都抽取出來(lái),做成一個(gè)個(gè)的startes(啟動(dòng)器)藻三,只需要在項(xiàng)目里面引入這些starters洪橘,相關(guān)場(chǎng)景的所有依賴(lài)都會(huì)導(dǎo)入進(jìn)來(lái)。
2棵帽、主程序類(lèi)(主入口類(lèi))
/**
* @SpringBootApplication標(biāo)注一個(gè)主程序類(lèi)熄求,說(shuō)明這是一個(gè)Springboot應(yīng)用
*/
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
SpringApplication.run(HelloWorldMainApplication.class,args);
}
}
@SpringBootApplication
:標(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)用弟晚。
我們來(lái)查看@SpringBootApplication
這個(gè)注解,發(fā)現(xiàn)其是一個(gè)組合注解:
@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}
)}
)
-
@SpringBootConfiguration
:Springboot的配置類(lèi)逾苫,標(biāo)注在某個(gè)類(lèi)上指巡,表示這是一個(gè)SpringBoot的配置類(lèi)。該Springboot的配置類(lèi)里面使用了@Configuration
注解隶垮,這個(gè)注解是注解在配置類(lèi)(作用等同于配置文件)上面的藻雪,配置類(lèi)也是容器中的一個(gè)組件。 -
@EnableAutoConfiguration
:開(kāi)啟自動(dòng)配置功能狸吞。以前我們需要配置的東西勉耀,使用了這個(gè)注解之后指煎,Springboot都會(huì)幫我們自動(dòng)配置。其里面的注解如下:
@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
@AutoConfigurationPackage
是自動(dòng)配置包的注解便斥,其作用本質(zhì)上是將主配置類(lèi)(@SpringBootApplication
標(biāo)注的類(lèi))的所在包及其下面所有子包的所有組件掃描到Spring容器中至壤。
@Import({EnableAutoConfigurationImportSelector.class})
將所有需要導(dǎo)入的組件導(dǎo)入進(jìn)容器中,會(huì)給容器導(dǎo)入很多的自動(dòng)配置類(lèi)枢纠,即給容器導(dǎo)入這個(gè)場(chǎng)景需要的所有組件像街,并配置好這些組件。
有了這些配置類(lèi)晋渺,我們就不需要手動(dòng)編寫(xiě)配置注入功能組件镰绎。
對(duì)于JavaEE整體的解決方案和自動(dòng)配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar中。
四木西、使用Spring Initializr來(lái)快速創(chuàng)建一個(gè)SpringBoot項(xiàng)目
SpringBoot | 使用Spring Initializr來(lái)快速創(chuàng)建一個(gè)SpringBoot項(xiàng)目
默認(rèn)生成的SpringBoot項(xiàng)目:
主程序已經(jīng)寫(xiě)好了畴栖,我們只需要編寫(xiě)我們自己的邏輯代碼
-
resources文件夾中的目錄結(jié)構(gòu):
- static:保存所有的靜態(tài)資源:js css等等
- templates:保存所有的模板頁(yè)面(SpringBoot默認(rèn)jar包使用嵌入式的Tomcat,默認(rèn)不支持JSP頁(yè)面)八千,可以使用模板引擎(freemarker吗讶,thymeleaf等)
- application.properties:Springboot應(yīng)用的配置文件,可以修改一些默認(rèn)設(shè)置恋捆。