Spring Boot來簡化Spring應用開發,約定大於配置,去繁從簡,just run就能建立一個獨立的,產品級別的應用css
背景:html
J2EE笨重的開發、繁多的配置、低下的開發效率、複雜的部署流程、第三方技術集成難度大.java
解決:web
"Spring全家桶"時代spring
Spring Boot -> J2EE一站式解決方案瀏覽器
Spring Cloud -> 分佈式總體解決方案服務器
優勢:架構
1.快速建立獨立運行的Spring項目以及主流框架集成app
2.使用嵌入式的Servlet容器,應用無需打成WAR包框架
3.starters自動依賴與版本控制
4.大量的自動配置,簡化開發,也可修改默認值
5.無需配置XML,伍代碼生成,開箱即用
6.準生產環境的運行時應用監控
7.與雲計算的自然集成
2014,martin fowler
微服務:架構風格
一個應用應該就是一組小型服務;能夠經過HTTP的方式進行互通;
每個功能元素最終都是一個可獨立替換和獨立升級的軟件單元;
詳細參照微服務文檔:https://martinfowler.com/articles/microservices.html
環境約束:
jdk1.8;
maven3.x:maven 3.3以上版本;
IntelliJIDEA2017;
SpringBoot 1.5.9.RELEASE;
1.給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>
2.IDEA設置
一個功能:
瀏覽器發送hello請求,服務器接受請求並處理,響應Hello World字符串;
1.建立一個maven工程
2.導入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>
3.編寫一個主程序;啓動Spring Boot應用
/** * @SpringBootApplication 來標註一個主程序類,說明這是一個Spring Boot應用 */ @SpringBootApplication public class HelloWorldMainApplication { public static void main(String[] args) { // Spring應用啓動起來 SpringApplication.run(HelloWorldMainApplication.class); } }
4.編寫相關的Controller、Service
@Controller public class HelloController { @ResponseBody @RequestMapping("/hello") public String hello(){ return "Hello World"; } }
5.運行主程序測試
6.簡化部署
<!-- 這個插件,能夠將應用打包成一個可執行的jar包 --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
將這個應用打成jar包,直接使用java -jar的命令進行執行;
1.POM文件
父項目 <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裏面管理的依賴天然須要聲明版本號)
2.導入的依賴
1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-web</artifactId> 4 </dependency>
spring-boot-starter-web:
spring-boot-starter:spring-boot場景啓動器;幫咱們導入了web模塊正常運行所依賴的組件
Spring Boot將全部的功能場景都抽取出來,作成一個個的starters(啓動器),只須要在項目裏面引入這些starter相關場景的全部依賴都會導入進來,要用什麼功能就導入什麼場景的啓動器
3.主程序類,主入口類
/** * @SpringBootApplication 來標註一個主程序類,說明這是一個Spring Boot應用 */ @SpringBootApplication public class HelloWorldMainApplication { public static void main(String[] args) { // Spring應用啓動起來 SpringApplication.run(HelloWorldMainApplication.class); } }
@SpringBootApplication: Spring Boot應用標註在某個類上說明這個類是Spring Boot的主配置類,SpringBoot就應該運行這個類的main方法來啓動SpringBoot應用;
1 @Target({ElementType.TYPE}) 2 @Retention(RetentionPolicy.RUNTIME) 3 @Documented 4 @Inherited 5 @SpringBootConfiguration 6 @EnableAutoConfiguration 7 @ComponentScan( 8 excludeFilters = {@Filter( 9 type = FilterType.CUSTOM, 10 classes = {TypeExcludeFilter.class} 11 ), @Filter( 12 type = FilterType.CUSTOM, 13 classes = {AutoConfigurationExcludeFilter.class} 14 )} 15 ) 16 public @interface SpringBootApplication {
@SpringBootConfiguration:Spring Boot的配置類;
標註在某個類上,表示這是一個Spring Boot的配置類:
@Configuration:配置類上來標註這個註解;
配置類 --- 配置文件;配置類也是容器中的一個組件
@EnableAutoConfiguration: 開啓自動配置功能;
之前咱們須要配置的東西,Spring Boot幫我自動配置;@EnableAutoConfiguration告訴SpringBoot開啓自動配置功能;這樣自動配置才能生效;
1 @AutoConfigurationPackage 2 @Import({EnableAutoConfigurationImportSelector.class}) 3 public @interface EnableAutoConfiguration {
@AutoConfigurationPackage: 自動配置包
@Import({Registrar.class}):
Spring的底層註解@Import,給容器中導入一個組件;導入的組件由Registrar.class
將主配置類(@SpringBootApplication標註的類)的所在包及下面全部子包及下面全部子包裏面的全部組件掃描到Spring容器;
@Import({EnableAutoConfigurationImportSelector.class})
給容器中導入組件?
EnableAutoConfigurationImportSelector: 導入哪些組件的選擇器;
將全部須要導入的組件一全類名的方式返回;這些組件就會被添加到容器中;
會給容器中導入很是多的自動配置類(xxxAutoConfiguration);就是給容器中導入這個場景須要的全部組件,並配置好這些組件
有了自動配置類,免去了咱們手動編寫配置注入功能組件等的工做;
SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class, classLoader);
Spring Boot在啓動的時候從類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值,將這些值做爲自動配置類導入到容器中,自動配置類就生效,幫咱們進行自動配置工做之前咱們須要本身配置的東西,自動配置幫咱們;
J2EE的總體解決方案和自動配置都在spring-boot-autoconfigure-1.5.9.RELEASE.jar;
IDE都支持使用Spring的項目建立想到快速建立一個Spring Boot項目
選擇咱們須要的模塊;嚮導會聯網建立Spring Boot項目;
默認生成的Spring Boot項目;