第一部分 Spring 基礎(chǔ)
第一章 Spring起步
唯一的不變就是變化狡耻,Spring框架新的關(guān)注點(diǎn)包括:
1、微服務(wù)猴凹。
2夷狰、反應(yīng)式編程。
3郊霎、Spring Boot沼头。
什么是Spring?
組件
任何實(shí)際的應(yīng)用程序都是由很多組件組成的。每個(gè)組件負(fù)責(zé)整個(gè)應(yīng)用功能的一部分进倍。這些組件需要與其它的應(yīng)用元素進(jìn)行協(xié)調(diào)以完成自己的任務(wù)土至。當(dāng)應(yīng)用程序運(yùn)行時(shí),需要以某種方式創(chuàng)建并引入這些組件猾昆。在Spring中陶因,這些組件可以稱為Bean。
容器
Spring的核心是提供了一個(gè)容器(container)垂蜗,通常稱為Spring應(yīng)用上下文(Spring Application Context)楷扬,它們會(huì)創(chuàng)建和管理這些組件。
依賴注入
Spring通過(guò)依賴注入DI(Dependency Injection)的模式么抗,借助于自動(dòng)裝配autowiring和組件掃描component scanning毅否,將Bean裝配在一起。組件掃描技術(shù)使得Spring能夠自動(dòng)發(fā)現(xiàn)應(yīng)用類路徑下的組件蝇刀,并將它們創(chuàng)建成Spring應(yīng)用上下文中的bean螟加。通過(guò)自動(dòng)裝配技術(shù),Spring能夠自動(dòng)為組件注入它們所依賴的其它bean吞琐。
Spring Boot
Spring Boot是Spring框架的擴(kuò)展捆探,通過(guò)自動(dòng)配置autoconfiguration,大幅度減少了構(gòu)建應(yīng)用所需要的顯示配置的數(shù)量站粟,極大的改善了Spring的開(kāi)發(fā)黍图。
初始化Spring應(yīng)用
Spring Initializr是一個(gè)基于瀏覽器的web 應(yīng)用,同時(shí)也是一個(gè)REST API奴烙,能夠生成一個(gè)Spring項(xiàng)目結(jié)構(gòu)的骨架助被。使用它的方式包括:
1、通過(guò)https://start.spring.io/的web應(yīng)用切诀。
2揩环、在命令行中使用curl命令
3、在命令行中使用SpringBoot命令行接口幅虑,Spring Boot CLI丰滑。
4、在IDE倒庵,例如Spring Tool Suite褒墨,IntelliJ IDEA,NetBeans中創(chuàng)建新項(xiàng)目擎宝。
Spring Initializr默認(rèn)使用具有JAR的打包方式郁妈,這是基于云思維做出的選擇。
spring-boot- maven-plugin
這個(gè)插件提供了一些重要功能:
1绍申、提供了一個(gè)maven goal噩咪。
2锄奢、確保依賴的所有庫(kù)在運(yùn)行時(shí)類路徑下是可用的,并且都包含在可執(zhí)行的JAR文件中剧腻。
3拘央、在JAR中生成一個(gè)manifest文件,將引導(dǎo)類聲明為可執(zhí)行JAR的主類书在。
編寫Spring應(yīng)用
Spring MVC
Spring MVC是Spring自帶的Web框架灰伟,它的核心是控制器controller的理念∪逖控制器是處理請(qǐng)求栏账,并以某種方式進(jìn)行信息響應(yīng)的類。
Spring Boot Dev Tools
Dev Tools 提供了一些開(kāi)發(fā)期的工具栈源,包括:
1挡爵、代碼變更后自動(dòng)重啟。
2甚垦、瀏覽器自動(dòng)刷新茶鹃。
3、自動(dòng)禁用模版緩存艰亮。
4闭翩、內(nèi)置H2控制臺(tái)。
第二章 開(kāi)發(fā)Web應(yīng)用
在SpringWeb引用中迄埃,獲取和處理數(shù)據(jù)是控制器的任務(wù)疗韵,將數(shù)據(jù)渲染到HTML中并在瀏覽器中展現(xiàn)是視圖的任務(wù)。
展現(xiàn)信息
創(chuàng)建Web應(yīng)用的步驟:
1侄非、構(gòu)建領(lǐng)域類蕉汪,即實(shí)體。
2逞怨、創(chuàng)建控制器類者疤。
3、設(shè)計(jì)視圖:JSP骇钦,Thymeleaf宛渐,F(xiàn)reeMarker竞漾,Mustache眯搭、Groovy的模板。靜態(tài)內(nèi)容要放在/static目錄下业岁。
處理表單提交
校驗(yàn)表單輸入
Spring支持Java的Bean Validation API鳞仙,也被稱為JSR-303。
第三章 使用數(shù)據(jù)
使用JDBC讀取和寫入數(shù)據(jù)
Spring對(duì)JDBC的支持要?dú)w功于JdbcTemplate類笔时。
可以將表結(jié)構(gòu)創(chuàng)建語(yǔ)句schema.sql棍好,數(shù)據(jù)文件data.sql文件放在src/main/resources文件夾下,Spring boot會(huì)自動(dòng)加載。
使用JPA讀取和寫入數(shù)據(jù)
Spring Data包含多個(gè)子項(xiàng)目借笙。Spring Data JPA基于關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行JPA持久化扒怖。
DSL
Spring Data定義了一組小型的領(lǐng)域特定語(yǔ)言Domain-Specific Language,通過(guò)方法簽名來(lái)定義查詢业稼,但復(fù)雜的查詢還是建議使用@Query注解來(lái)實(shí)現(xiàn)盗痒。
第四章 保護(hù)Spring
啟用Spring Security
只需要將Spring Security添加到項(xiàng)目的構(gòu)建文件中,我們就得到了以下特性:
1低散、所有的HTTP請(qǐng)求路徑都需要認(rèn)證
2俯邓、不需要特定的角色和權(quán)限
3、沒(méi)有登錄頁(yè)面熔号。
4稽鞭、認(rèn)證過(guò)程是通過(guò)HTTP basic認(rèn)證對(duì)話框?qū)崿F(xiàn)的。
5引镊、系統(tǒng)只有一個(gè)用戶朦蕴,用戶名為user。
Spring Security配置
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuiler auth){
}
@Override
protected void configure(HttpSecurity http) throw Exception{
//web級(jí)別安全性定義
//1弟头、配置自定義的登錄頁(yè)面梦重。
// 2、預(yù)防跨站請(qǐng)求偽造亮瓷。
// 3琴拧、支持用戶退出應(yīng)用。
}
}
已經(jīng)認(rèn)證的用戶信息可以通過(guò)SecurityContext對(duì)象來(lái)獲取嘱支。
第五章 使用配置屬性
Spring有兩種不同的配置:
1蚓胸、Bean裝配。
2除师、屬性注入沛膳。Spring的環(huán)境抽象是各種配置屬性的一站式服務(wù)。Spring環(huán)境會(huì)拉去多個(gè)屬性源汛聚,例如JVM系統(tǒng)屬性锹安,操作系統(tǒng)環(huán)境變量屬性,命令行參數(shù)倚舀,應(yīng)用屬性配置文件叹哭,并將其聚合到一個(gè)源,然后注入到Spring的bean中痕貌。
默認(rèn)情況下风罩,Spring Boot通過(guò)Logback配置日志。
Spring提供了@ConfigurationProperties注解來(lái)支持配置屬性的注入舵稠,還可以使用profile進(jìn)行配置超升。