springboot系列之02-需要了解的巨集觀知識點
未經允許,不得轉載
原作者:字母哥部落格
本文完整系列出自:springboot深入淺出系列
一、Spring Boot 、 Spring MVC 、Spring對比
首先你需要明白一件事情:Spring Boot專案目的並不是替換Spring、SpringMVC,而是使他們用起來更加簡單。
Spring 框架
Spring框架最核心的特性就是依賴注入DI(Dependency Injecttion)和控制反轉IOC(Inversion Of Control)。如果你能夠合理的使用DI和IOC,可以開發出鬆耦合、擴充套件性好的的應用程式。
Spring MVC
Spring MVC提供了一種友好的方式來開發Web應用程式。 通過使用諸如Dispatcher Servlet,ModelAndView和View Resolver,可以輕鬆開發Web應用程式。
Spring Boot
Spring 和 Spring MVC最大的弊病在於存在大量的配置,並且這些配置在不同的專案中具有很高的相似性。從而導致重複配置,繁瑣而且雜亂!
Spring Boot期望通過結合自動配置和starters來解決了這個問題。 另外,Spring Boot還提供了一些功能,可以更快地構建可用於生產環境的應用程式。
二、Spring Boot 自動配置
Spring和Spring MVC應用程式裡面有大量的XML或Java Bean配置。Spring Boot為解決這個問題,提供一種新的解決方案,新的思維方式。
springboot思考的方式:是不是可以更加智慧一點,當Spring中加入一些新的jar包,可以自動的配置一些bean。 比如:Spring MVC JAR位於類路徑中時,自動配置Dispatcher Servlet。當然,當這些自動的預設配置不符合我們的要求的時候,我們可以修改。
三、什麼是Spring Boot Starter?
Spring Boot Starter是一組被依賴第三方類庫的集合。
如果你要開發一個web應用程式,就通過包管理工具(如maven)引入spring-boot-starter-web就可以了,而不用分別引入下面這麼多依賴類庫,spring-boot-starter-web一次性幫你引入下面的這些常用類庫。
- Spring — spring 核心,beans,context上下文,AOP面向切面
- Web MVC — Spring MVC
- Jackson — JSON資料的序列化與反序列化
- Validation — Hibernate引數校驗及校驗API
- 嵌入式 Servlet Container — Tomcat
- 日誌框架Logging — logback,slf4j
四、什麼是Spring Boot Starter Parent
所有的Spring Boot專案預設使用spring-boot-starter-parent作為應用程式的父專案。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
複製程式碼
繼承父專案的好處在於: 統一java版本配置和其他的一些依賴類庫的版本。也就是說,你引入的第三方類庫不要加版本號,父專案替你管理版本,而且是經過相容性測試的。比你自己隨便引入一個版本相容性更好。
當然父專案只能幫你管理一些常用類庫的版本,如果你引入一些不常用的jar,還是要自己管理版本號及相容性!
五、嵌入式web容器
Spring boot打成jar包,預設包含嵌入式的web容器:tomcat。你可以簡單的使用如下命令啟動一個web服務:
java -jar springboot-demo.jar
複製程式碼
這更有利於微服務的部署及微服務的構建、啟動、擴容。Spring Boot還支援Jetty和Undertow作為web容器。
六、Spring Data
Spring Data的目標是提供一種更友好的方式或者是API來存取資料。包括對於關係型資料庫和NOSQL資料的支援。比如:
- Spring Data JPA — 關係型資料庫操作的API,友好且易於使用
- Spring Data MongoDB -MongoDB的操作API
- Spring Data REST — 從持久層Repositories自動生成服務層API,暴露 REST APIs 介面。超級好用!
當然,Spring Data還有更多好用的特性和支援等待你去探索!
七、spring boot2.x新特性
7.1.基礎環境升級
- 最低 JDK 8,支援 JDK 9,不再支援 Java 6 和 7。Spring Boot 2.0 要求 Java 8 作為最低版本,許多現有的 API 已更新,以利用 Java 8 的特性。 例如,介面上的預設方法,函式回撥以及新的 API,如 javax.time。
- 如果你正在使用 Java 7 或更早版本,則在開發 Spring Boot 2.0 應用程式之前,需要升級你的 JDK。
7.2.依賴元件升級
- Jetty 9.4,Jetty 是一個開源的 Servlet 容器,它為基於 Java 的 Web 內容,例如 JSP 和 Servlet 提供執行環境。Jetty 是使用 Java 語言編寫的,它的 API 以一組 JAR 包的形式釋出。
- Tomcat 8.5,Apache Tomcat 8.5.x 旨在取代 8.0.x,完全支援 Java 9。
- Flyway 5,Flyway 是獨立於資料庫的應用、管理並跟蹤資料庫變更的資料庫版本管理工具。用通俗的話講,Flyway 可以像 SVN 管理不同人的程式碼那樣,管理不同人的 SQL 指令碼,從而做到資料庫同步。
- Hibernate 5.2,Hibernate 是一款非常流行的 ORM 框架。
- Gradle 3.4,Spring Boot 的 Gradle 外掛在很大程度上已被重寫,有了重大的改進。
- Thymeleaf 3.0,Thymeleaf 3 相對於 Thymeleaf 2 有非常大的效能提升。
7.3. 預設軟體替換
- 預設資料庫連線池已從 Tomcat 切換到 HikariCP,HikariCP 是一個高效能的 JDBC 連線池,Hikari 是日語“光”的意思。
- redis客戶端預設使用 Lettuce,替換掉Jedis。Lettuce 是一個可伸縮的執行緒安全的 Redis 客戶端,用於同步、非同步和反應使用。多個執行緒可以共享同一個 RedisConnection,它利用優秀 Netty NIO 框架來高效地管理多個連線,支援先進的 Redis 功能,如 Sentinel、叢集、流水線、自動重新連線和 Redis 資料模型。
7.4.新技術的引入
- 響應式程式設計WebFlux,重要的變革,後續章節會詳細展示
- 支援 Quartz。Spring Boot 1.0 並沒有提供對 Quartz 的支援,之前出現了各種整合方案,Spring Boot 2.0 給出了最簡單的整合方式。
- 對Kotlin 的支援
- JOOQ 的支援。JOOQ 是基於 Java 訪問關係型資料庫的工具包。JOOQ 既吸取了傳統 ORM 操作資料的簡單性和安全性,又保留了原生 SQL 的靈活性,它更像是介於 ORMS 和 JDBC 的中間層。
7.5.彩蛋
在 Spring Boot 1.0 專案中 src/main/resources 路徑下新建一個 banner.txt 檔案,檔案中寫入一些字元,啟動專案時就會發現預設的 Banner 被替換了,到了 Spring Boot 2.0 現在可以支援 Gif 檔案的列印,Spring Boot 2.0 在專案啟動的時候,會將 Gif 圖片的每一個畫面,按照順序列印在日誌中,所有的畫面列印完畢後,才會啟動 Spring Boot 專案。
未經允許,不得轉載
原作者:字母哥部落格
本文完整系列出自:springboot深入淺出系列