1.Spring Boot簡介
簡化spring應(yīng)用開發(fā)的一個框架
整個spring技術(shù)棧的一個大整合
J2EE開發(fā)的一站式解決方案
2.微服務(wù)
微服務(wù):軟件架構(gòu)風(fēng)格
一個應(yīng)用應(yīng)該是一組小型服務(wù);可以通過HTTP的方式進(jìn)行互通;
單體應(yīng)用:ALL IN ONE
微服務(wù):每一個功能單元最終都是一個可獨(dú)立替換和獨(dú)立升級的軟件單元;
3.環(huán)境準(zhǔn)備
環(huán)境約束:
-jdk 1.8
-maven 3.3以上版本
-idea 2017
-SpringBoot 1.5.9
3.1 MAVEN設(shè)置
給maven的setttings.xml配置文件的profiles標(biāo)簽添加
<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>
3.2 IDEA設(shè)置
整合maven進(jìn)來


4.Spring Boot HelloWorld
一個功能:
瀏覽器發(fā)送hello請求,服務(wù)器接受請求并處理,響應(yīng)HelloWolrd字符串;
4.1創(chuàng)建一個maven工程;(jar)
4.2導(dǎo)入spring boot相關(guān)的依賴
<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>
4.3編寫一個主程序;啟動Spring Boot應(yīng)用
/**
* @SpringBootApplication 來標(biāo)注一個主程序類,說明這是一個Spring Boot應(yīng)用
*/
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
// Spring應(yīng)用啟動起來
SpringApplication.run(HelloWorldMainApplication.class,args);
}
}
4.4 編寫相關(guān)的Controller、Service
@Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello(){
return "hello world";
}
}
4.5 運(yùn)行主程序測試
4.6簡化部署
<!-- 這個插件,可以將應(yīng)用打包成一個可執(zhí)行的jar包;-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
將這個應(yīng)用通過 maven插件打包成jar包,然后通過java -jar命令運(yùn)行
5.Hello Wolrd探究
5.1 POM文件
5.1.1 父項目
<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應(yīng)用里面的所有依賴版本
Spring Boot的版本仲裁中心
以后我們導(dǎo)入的依賴默認(rèn)是不需要寫版本;(沒有在dependencies里面管理的依賴自然需要聲明版本號)
5.1.2啟動器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
spring-boot-starter-web:
spring-boot-starter:spring-boot 場景啟動器;幫我們導(dǎo)入web模塊正常運(yùn)行所依賴的組件;
Spring Boot將所有的功能場景抽取出來,做成一個個的starter(啟動器),只需要在項目里面引入這些starter相關(guān)場景的所有依賴都會導(dǎo)入進(jìn)來。要用什么功能就導(dǎo)入什么場景的啟動器
5.2 主程序類,主入口類
/**
* @SpringBootApplication 來標(biāo)注一個主程序類,說明這是一個Spring Boot應(yīng)用
*/
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
// Spring應(yīng)用啟動起來
SpringApplication.run(HelloWorldMainApplication.class,args);
}
}
@SpringBootApplication:spring boot應(yīng)用標(biāo)注在某個類上說明這個類是Spring Boot的主配置類,SpringBoot就應(yīng)該運(yùn)行這個類的main方法來啟動SpringBoot應(yīng)用;
@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的配置類;
@Configuration:配置類上來標(biāo)注這個注解
配置類-----配置文件;配置類也是容器的一個組件;@Component
@EnableAutoConfiguration:開啟自動配置功能;
以前我們需要配置的東西,Spring Boot邦我們自動配置;@EnableAutoConfiguration告訴SpringBoot開啟自動配置功能;這樣自動配置才能生效;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
@AutoConfigurationPackage:自動配置包
Spring的底層注解@Import,給容器中導(dǎo)入一個組件;導(dǎo)入的組件由EnableAutoConfigurationImportSelector.class;
將主配置類(@SpringBootApplication標(biāo)注的類)的所在包及下面所有子包里面的所有組件掃描到Spring容器;
@Import({EnableAutoConfigurationImportSelector.class})
給容器中導(dǎo)入組件?
EnableAutoConfigurationImportSelector:導(dǎo)入那些組件
將所有需要導(dǎo)入的組件以全類名的方式返回;這些組件就會被添加到容器中;
會給容器中導(dǎo)入非常多的自動配置類(***AutoConfiguration);就是給容器中導(dǎo)入這個場景需要的所有組件,并配置好這些組件;

有了自動配置類,免去了我們手邊編寫配置注入功能組件等工作;
SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class.classLoader);
Spring Boot 在啟動的時候從類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值,將這些值作為自動配置類導(dǎo)入到容器中,自動配置類就生效,幫我們進(jìn)行自動配置的工作;以前我們需要自己配置的東西,自動配置類都做完了;
J2EE的整體整合解決方案和自動配置都在spring-boot-autoconfigure-1.5.9RELEASE.jar;
6.使用Spring Initializer快捷創(chuàng)建Spring Boot項目
6.1 IDEA:使用Spring Initializer快速創(chuàng)建項目


選擇我們需要的模塊;向?qū)?lián)網(wǎng)創(chuàng)建Spring Boot項目;

默認(rèn)生成的Spring Boot項目;
- 主程序已經(jīng)生成好了,我們只需要寫自己的邏輯
- resources文件夾中目錄結(jié)構(gòu)
** static:保存所有的靜態(tài)資源:js css images;
** templates:保存所有的模板頁面 ;(Spring Boot默認(rèn)jar包使用嵌入式的tomcat,默認(rèn)不支持jsp頁面);可以使用模板引擎(freemarker、thymeleaf);
** application.properties:Spring Boot應(yīng)用的配置文件;可以修改一些默認(rèn)配置;比如server.port=8081