概述
Spring4是一套JAVA的MVC框架,經(jīng)過一系列的自動(dòng)化改良祭隔,如今變得非常簡單易用货岭。Spring4框架的功能很多,有非常多詳細(xì)的介紹,這里僅僅提綱式的陳列要點(diǎn)千贯,以幫助初學(xué)者快速入門屯仗。
如在本筆記中發(fā)現(xiàn)錯(cuò)誤,歡迎指正搔谴。
參考資料
《Spring實(shí)戰(zhàn)》魁袜,第四版,人民郵電出版社敦第。
Bean裝配
創(chuàng)建應(yīng)用對(duì)象之間協(xié)作關(guān)系的行為通常稱為裝配峰弹,這也是依賴注入的本質(zhì)。裝配就是將一個(gè)符合定義的bean賦予給一個(gè)定義的變量芜果。
Spring提供了三種裝配方式鞠呈,這三種方式也可以混合使用:
- 隱式bean發(fā)現(xiàn)和自動(dòng)裝配,這是最方便的方式师幕,盡量使用這種方式粟按。
- Java中配置,適用于自動(dòng)化無法完成的場(chǎng)景霹粥。
- XML中配置,適用于Java配置無法完成的場(chǎng)景疼鸟,一般情況下不會(huì)用到后控。
此外,Spring還提供了兩種條件化裝配方式:
- 根據(jù)環(huán)境裝配空镜。
- 根據(jù)指定條件裝配浩淘。
隱式bean發(fā)現(xiàn)和自動(dòng)裝配
兩個(gè)步驟完成自動(dòng)化裝配:
- 組件掃描:自動(dòng)發(fā)現(xiàn)bean。
- 自動(dòng)裝配:自動(dòng)滿足bean之間的依賴吴攒。
組件掃描
- 在擁有@Configuration注解的配置類中添加@ComponentScan注解张抄,默認(rèn)會(huì)在當(dāng)前的包和子包中進(jìn)行掃描。
- 通過傳入?yún)?shù)basePackages可以指定需要掃描的基礎(chǔ)包洼怔,這個(gè)參數(shù)名可以省略署惯,格式如下:
- "a"
- {"a", "b“}
- basePackages="a"
- basePackages={"a", "b“}
- 為了類型安全,也可以通過傳入?yún)?shù)basePackageClasses來指定類镣隶,這些類所在的包會(huì)作為基礎(chǔ)包极谊。為此建議為每個(gè)基礎(chǔ)包創(chuàng)建一個(gè)用來掃描的空標(biāo)記接口,以避免代碼重構(gòu)時(shí)被刪除安岂。
bean定義
- 為定義bean的類添加@Component注解轻猖,bean的ID默認(rèn)是類名將第一個(gè)字母變成小寫,也可以通過給注解的默認(rèn)參數(shù)name傳入字符串值來指定ID域那。
- @Named注解和@Component注解有一些細(xì)微的差距咙边,但是大多數(shù)時(shí)候是可以替換使用的。
自動(dòng)裝配
- 使用@Autowired注解,該注解可以在如下位置使用:
- 成員變量败许,對(duì)該變量進(jìn)行自動(dòng)裝配王带。
- 構(gòu)造器,對(duì)構(gòu)造器的參數(shù)進(jìn)行自動(dòng)裝配檐束。
- 任意的類方法上辫秧,對(duì)方法的參數(shù)進(jìn)行自動(dòng)裝配。
- 如果沒有匹配的bean則會(huì)拋出異常被丧,可以通過給注解的參數(shù)required傳入false值來允許未裝配盟戏。
- @Inject注解和@Autowired注解有一些細(xì)微的差距,但是大多數(shù)時(shí)候是可以替換使用的甥桂。
Java代碼裝配
在JavaConfig類中可以進(jìn)行顯式的配置柿究,創(chuàng)建JavaConfig類的關(guān)鍵在于要添加@Configuration注解以表明這是一個(gè)配置類。
通過@Import注解可以在配置類中導(dǎo)入其他的配置類黄选。
- 為配置類中返回bean的方法添加@Bean注解進(jìn)行配置蝇摸,bean的ID即為方法名。
- 通過給注解的name參數(shù)傳入一個(gè)字符串值可以設(shè)置一個(gè)不同的ID办陷。
XML裝配
某些情況下不得不使用xml來進(jìn)行裝配貌夕,但是這種場(chǎng)景很少見,這里就略過了民镜。
根據(jù)環(huán)境裝配
通過使用注解@Profile可以指定bean屬于哪個(gè)環(huán)境啡专,沒有使用該注解的bean在任何環(huán)境下都會(huì)被創(chuàng)建。
@Profile注解可以放在如下位置:
- 配置類上制圈,對(duì)該類中的所有bean生效们童。
- 配置類的方法上,對(duì)該方法的bean生效鲸鹦。
- Bean類上慧库,對(duì)該bean生效。
根據(jù)條件裝配
- 通過使用@Conditional注解馋嗜,可以根據(jù)指定條件的計(jì)算結(jié)果來決定是否裝配齐板。
- 注解的傳入?yún)?shù)為一個(gè)實(shí)現(xiàn)了Condition接口的類,并且通過接口中的matches方法來進(jìn)行判斷嵌戈。
- 注解可以放置的位置同@Profile注解覆积。
- @Profile注解本身也使用了@Conditional注解,并且引用了ProfileCondition作為Condition的實(shí)現(xiàn)熟呛。
處理裝配歧義
當(dāng)有多個(gè)滿足條件的bean都能進(jìn)行裝配時(shí)宽档,Spring會(huì)因?yàn)椴恢涝撗b配哪一個(gè)而報(bào)錯(cuò),Spring提供了如下方式來處理歧義:
- 通過在申明bean的時(shí)候加上@Primary注解來表明某個(gè)bean是首選的庵朝,但是有多個(gè)加了該注解的bean都滿足條件時(shí)同樣會(huì)報(bào)錯(cuò)吗冤。
- 通過在使用@Autowire注解的時(shí)候加上@Qualifier注解來指定希望注入的bean又厉,傳入的參數(shù)是一個(gè)限定符,默認(rèn)每個(gè)bean都會(huì)根據(jù)其ID創(chuàng)建一個(gè)同名限定符椎瘟。注解可以重復(fù)使用覆致。
- 通過在聲明bean的時(shí)候加上@Qualifier注解來指定該bean的限定符。注解可以重復(fù)使用肺蔚。
- 通過@Qualifier注解來創(chuàng)建自定義的注解煌妈,并使用自定義的注解。
Bean作用域
Spring為bean定義了多種作用域宣羊,通過在聲明bean的同時(shí)使用@Scope注解可以指定bean的作用域:
- 單例(Singleton):整個(gè)應(yīng)用中只創(chuàng)建bean的一個(gè)實(shí)例璧诵,這是默認(rèn)作用域。
- 原型(Prototype):每次注入都會(huì)創(chuàng)建一個(gè)實(shí)例仇冯。
- 會(huì)話(Session):為web應(yīng)用中為每個(gè)會(huì)話創(chuàng)建一個(gè)實(shí)例之宿。
- 請(qǐng)求(Request):為web應(yīng)用中每個(gè)請(qǐng)求創(chuàng)建一個(gè)實(shí)例。
環(huán)境配置
Spring允許為不同的環(huán)境設(shè)置不同的環(huán)境變量苛坚,resource目錄下的application.properties文件或者application.yml文件就是用來進(jìn)行環(huán)境和環(huán)境變量的配置的比被。
- 兩種方式可以混合使用。
- yml是有序的泼舱,properties是無序的等缀。
變量設(shè)置
- properties文件采用每行一個(gè)key=value的形式來設(shè)置變量,用.符號(hào)分割key的字段娇昙。
- yml文件采用key:value的方式來設(shè)置變量项滑,用換行縮進(jìn)的方式來分割key的字段。
環(huán)境配置
- 通過為properties文件加上不同的環(huán)境名稱來創(chuàng)建不同的環(huán)境配置文件涯贞,格式為application-{env}.properties。
- 在yml文件中通過---符號(hào)來區(qū)分不同的環(huán)境配置變量危喉,并在相應(yīng)的代碼塊中使用spring.profiles變量來設(shè)置代碼環(huán)境名稱宋渔。
環(huán)境激活
- spring.profiles.active屬性設(shè)置當(dāng)前激活的環(huán)境,可以在配置文件中設(shè)置辜限。
- spring.profiles.default屬性設(shè)置默認(rèn)激活的環(huán)境皇拣,在沒有設(shè)置。spring.profiles.active時(shí)生效薄嫡。這個(gè)屬性需要在DispatcherServlet中設(shè)置氧急。
- 可以同時(shí)激活多個(gè)環(huán)境。
環(huán)境變量獲取
- 通過定義并自動(dòng)裝配Enviroment類型的bean來獲得環(huán)境變量毫深。
- 通過@Value注解并傳入${a.b}格式的字符串參數(shù)來進(jìn)行裝配吩坝,這種格式叫做屬性占位符。
- 通過@Value注解并傳入#{...}格式的字符串參數(shù)來進(jìn)行裝配哑蔫,這種格式叫做SpEL表達(dá)式钉寝。有關(guān)表達(dá)式的語法這里先略過弧呐。
面向切面編程
在軟件開發(fā)中,散布于應(yīng)用中多處的功能被稱為橫切關(guān)注點(diǎn)嵌纲。把這些橫切關(guān)注點(diǎn)與業(yè)務(wù)邏輯分離正是面向切面編程所要解決的問題俘枫。
術(shù)語理解
- 通知(Advice):通知定義了切面是什么以及何時(shí)應(yīng)用。Spring有五種類型的通知逮走。
- 前置通知(Before):在目標(biāo)方法被調(diào)用之前調(diào)用通知功能鸠蚪。
- 后置通知(After):在目標(biāo)方法完成之后調(diào)用通知。
- 返回通知(After-returning):在目標(biāo)方法成功執(zhí)行之后調(diào)用通知师溅。
- 異常通知(After-throwing):在目標(biāo)方法拋出異常后調(diào)用通知茅信。
- 環(huán)繞通知(Around):通知包裹了被通知的方法,自定義方法被調(diào)用之前和之后的通知行為险胰。
- 連接點(diǎn):應(yīng)用執(zhí)行過程中能夠插入切面的一個(gè)點(diǎn)汹押,可以是調(diào)用方法時(shí)、拋出異常時(shí)甚至修改一個(gè)字段時(shí)起便。
- 切點(diǎn):定義會(huì)匹配通知所要織入的一個(gè)或者多個(gè)連接點(diǎn)棚贾。
- 切面:通知和切點(diǎn)共同定義了切面的全部內(nèi)容,是什么榆综、在何時(shí)和何處完成其功能妙痹。
- 引入:允許我們向現(xiàn)有的類添加新的方法或?qū)傩浴?/li>
- 織入:把切面應(yīng)用到目標(biāo)對(duì)象并創(chuàng)建新的代理對(duì)象的過程,在目標(biāo)對(duì)象的生命周期里有多個(gè)點(diǎn)可以進(jìn)行織入:
- 編譯期:需要特殊的編譯器鼻疮,比如AspectJ怯伊。
- 類加載期:需要特殊的類加載器。
- 運(yùn)行期:比如Spring AOP判沟。
Spring對(duì)AOP的支持
Spring提供了4中類型的AOP支持耿芹,前三種都是Spring AOP實(shí)現(xiàn)的變體:
- 基于代理的經(jīng)典Spring AOP,非常笨重和復(fù)雜挪哄,可以被注解驅(qū)動(dòng)替代吧秕。
- 純POJO切面,需要XML配置迹炼,可以被注解驅(qū)動(dòng)替代砸彬。
- @AspectJ注解驅(qū)動(dòng)的切面,Spring只支持方法級(jí)別的連接點(diǎn)斯入。
- 注入式AspectJ切面砂碉。
注解創(chuàng)建切面
定義切面的語法
- 常見的操作符有&&、||和!刻两。
- 常見的指示器有within增蹭、bean和args。
創(chuàng)建切面
- 在JavaConfig類中通過@EnableAspectJAutoProxy注解來啟動(dòng)自動(dòng)代理功能闹伪。
- 通過為類添加@Aspect注解來定義切面類沪铭。
- 通過使用通知方法的注解(比如@After)壮池,并將定義切面的語法作為參數(shù)傳入來定義切面方法。
- 通過使用注解@Pointcut來定義可以被重復(fù)使用的切點(diǎn)杀怠,其他切點(diǎn)就可以用該注解的方法來作為參數(shù)椰憋。
- 通過@DeclareParents注解可以創(chuàng)建切面代理,允許我們動(dòng)態(tài)的更換切面接口赔退。
- value屬性制定了哪種類型的bean要引入接口橙依。
- defaultImpl屬性指定了為引入功能實(shí)現(xiàn)提供的默認(rèn)類。
注入AspectJ切面
Spring AOP和AspectJ相比是一個(gè)比較弱的解決方案硕旗。但對(duì)于大部分功能來講窗骑,AspectJ切面與Spring是相互獨(dú)立的,在應(yīng)用AspectJ切面時(shí)幾乎不會(huì)涉及到Spring漆枚。
具體介紹這里略過创译。
Spring REST
Spring REST用于開發(fā)web應(yīng)用,是Spring MVC框架實(shí)現(xiàn)的功能墙基。
由于現(xiàn)在通用的Web架構(gòu)已經(jīng)將前端View和后端Controller分離软族,而后端普遍采用Restful的方式提供API接口,因此完整的MVC架構(gòu)已經(jīng)很少使用了残制,這里也就不多介紹立砸。
REST基本概念
REST含義
Representational State Transfer,表述性狀態(tài)轉(zhuǎn)移:
- 表述性:REST資源可以用各種形式來進(jìn)行表述初茶,包括JSON颗祝、XML和HTML。
- 狀態(tài):當(dāng)使用REST的時(shí)候恼布,更關(guān)注資源的狀態(tài)而不是對(duì)資源采取的行為螺戳。
- 轉(zhuǎn)移:REST涉及到轉(zhuǎn)移數(shù)據(jù)資源,它以某種表述性形式從一個(gè)應(yīng)用轉(zhuǎn)移到另一個(gè)應(yīng)用折汞。
REST動(dòng)作
REST是通過HTTP方法來定義的温峭,CRUD動(dòng)作和HTTP方法的匹配關(guān)系如下:
- Create:POST。
- Read:GET字支。
- Update:PUT或PATCH。
- Delete:DELETE奸忽。
REST創(chuàng)建
控制器類
- 為控制器類添加@RestController注解來申明這是一個(gè)控制器類堕伪,該注解基于@Component注解,需要放在能被掃描到的地方栗菜。
- 為控制器類添加@RequestMapping注解來為該類中所有控制器方法添加匹配路徑的前綴欠雌,參數(shù)如下:
- value:默認(rèn)傳入的參數(shù),用字符串或者字符串?dāng)?shù)組表示匹配的路徑疙筹。
控制器方法
- 為控制器方法添加@RequestMapping注解來創(chuàng)建控制器富俄,參數(shù)如下:
- value:默認(rèn)傳入的參數(shù)禁炒,用字符串或者字符串?dāng)?shù)組表示匹配的路徑,路徑中可以使用{}來創(chuàng)建路徑參數(shù)占位符霍比。
- method:HTTP方法幕袱,默認(rèn)為GET。
- 為控制器方法的參數(shù)添加@RequestParam注解表明這是一個(gè)查詢參數(shù)悠瞬,參數(shù)如下:
- value:默認(rèn)傳入的參數(shù)们豌,用字符串表示查詢參數(shù)的名稱。
- required:表示該參數(shù)是否必須存在浅妆,默認(rèn)為true望迎。
- defaultValue:沒有傳入查詢參數(shù)時(shí),該參數(shù)的默認(rèn)值凌外。
- 為參數(shù)添加@PathVariable注解表明這是一個(gè)路徑參數(shù)辩尊,需要將路徑占位符名稱作為參數(shù)傳入注解。
- 為參數(shù)添加@RequestBody注解表明這是一個(gè)需要進(jìn)行消息轉(zhuǎn)換的參數(shù)康辑,Spring會(huì)根據(jù)請(qǐng)求頭選擇合適的消息轉(zhuǎn)換器摄欲。
- 控制器方法默認(rèn)返回的狀態(tài)碼是200,可以參考異常處理的方法來修改這個(gè)值晾捏,但是不建議在這里進(jìn)行修改而應(yīng)該采用異常處理的方式蒿涎。
異常處理
異常類
默認(rèn)情況下,Spring會(huì)將自身的一些異常自動(dòng)轉(zhuǎn)換為合適的狀態(tài)碼惦辛。
通過為自定義異常類添加@ResponseStatus注解劳秋,可以為其添加狀態(tài)碼和返回消息,參數(shù)如下:
- value:HTTP狀態(tài)碼胖齐。
- reason:返回的字符串消息玻淑。
異常處理方法
- 在控制器類中可以為該類的控制器編寫異常處理方法,通過添加@ExceptionHandler注解并傳入異常類作為參數(shù)來聲明該方法處理的異常類型呀伙。
- 通過將方法的返回類型指定為ResponseEntity<T>补履,可以對(duì)Response的詳細(xì)內(nèi)容進(jìn)行配置,比如狀態(tài)嗎剿另、內(nèi)容箫锤、頭信息。
異常處理類
- 通過為類添加@ControllerAdvice注解來表明該類是一個(gè)全局的異常處理類雨女。
- 通過為異常處理類的方法添加@ExceptionHandler注解并傳入異常類作為參數(shù)來聲明該方法處理的異常類型谚攒。
校驗(yàn)器
當(dāng)控制器方法的傳入?yún)?shù)是一個(gè)Model類型時(shí),可以為該參數(shù)添加注解進(jìn)行校驗(yàn):
- @Valid:按照規(guī)則對(duì)傳入模型進(jìn)行校驗(yàn)氛堕,如果不滿足則會(huì)生成一個(gè)Error類型的實(shí)例賦予名為error的傳入?yún)?shù)馏臭,該參數(shù)需要在方法的傳入?yún)?shù)中聲明。
- @RequestBody:按照規(guī)則對(duì)傳入模型進(jìn)行校驗(yàn)讼稚,如果不滿足則不會(huì)匹配該方法括儒。
校驗(yàn)規(guī)則在Model類中進(jìn)行定義绕沈,方法是為屬性添加注解,列舉幾個(gè)常用注解:
- @Null:必須為空帮寻。
- @Max:必須是數(shù)字乍狐,并且它的值要小于等于給定值。
- @Future:必須是一個(gè)將來的日期规婆。
- @AssertTrue:必須是boolean型澜躺,并且值為true。
REST客戶端
Spring提供了一個(gè)RestTemplate作為REST客戶端模板抒蚜,使用它可以方便的發(fā)送restful的請(qǐng)求掘鄙。
Spring Security
Spring security是一個(gè)RBAC認(rèn)證框架。不過默認(rèn)角色和權(quán)限不是一對(duì)多的關(guān)系而是兩個(gè)獨(dú)立的概念嗡髓,如果需要實(shí)現(xiàn)通常理解的模型操漠,需要定制化開發(fā)。
配置Security
啟用
- 必須配置在一個(gè)實(shí)現(xiàn)了WebSecurityConfigurer的bean中饿这,或者擴(kuò)展WebSecurityConfigurerAdapter浊伙。
- 在JavaConfig類上添加@EnableWebSecurity注解來啟用功能。
配置
WebSecurityConfigurerAdapter有三個(gè)configure方法可以重載用來配置安全性:
- configure(WebSecurity):配置Filter鏈长捧。
- configure(HttpSecurity):配置如何通過攔截器保護(hù)請(qǐng)求嚣鄙。
- antMatchers()定義攔截路徑。
- access()等方法來定義攔截規(guī)則串结。
- and()方法連接配置哑子。
- requiresChannel()方法強(qiáng)制HTTPS。
- configure(AuthenticationManagerBuilder):配置user-detail服務(wù)肌割。
- 基于內(nèi)存用戶認(rèn)證卧蜓。
- 基于數(shù)據(jù)庫表認(rèn)證。
- 基于LDAP認(rèn)證把敞。
- 重寫UserDetailsService實(shí)現(xiàn)自定義認(rèn)證弥奸。
方法保護(hù)
Security還可以用來保護(hù)方法,通過在JavaConfig類上添加@EnableGlobalMethodSecurity注解來啟用該功能奋早。
Security提供了三種不同的安全注解:
- Secutiry自帶的@Secured注解盛霎,可以基于權(quán)限進(jìn)行保護(hù)。
- JSR-250的@RolesAllowed注解耽装,需要向@EnableGlobalMethodSecurity注解傳入?yún)?shù)jsr250Enabled=true來啟動(dòng)摩渺,使用上和@Secured注解類似。
- 表達(dá)式驅(qū)動(dòng)的注解剂邮,包括@PreAuthorize、@PostAuthorize横侦、@PreFilter和@PostFilter挥萌,需要向@EnableGlobalMethodSecurity注解傳入?yún)?shù)prePostEnabled=true參數(shù)來啟用绰姻,這種注解可以傳入SpEL表達(dá)式來對(duì)參數(shù)進(jìn)行驗(yàn)證,以及對(duì)輸入輸出進(jìn)行過濾引瀑。
關(guān)系型數(shù)據(jù)庫
Spring訪問關(guān)系型數(shù)據(jù)庫的便利:
- 提供了用于數(shù)據(jù)訪問的模板狂芋,可以將注意力放在執(zhí)行語句上。
- 提供了多樣而詳細(xì)的異常定義憨栽,能夠更加精確地表述錯(cuò)誤帜矾。
配置數(shù)據(jù)源
- JDBC驅(qū)動(dòng)程序定義數(shù)據(jù)源。
- DriverManagerDataSource:在每個(gè)連接請(qǐng)求時(shí)都會(huì)返回一個(gè)新建的連接屑柔。
- SimpleDriverDataSource:與DriverManagerDataSource工作方式類似屡萤,但是它直接使用JDBC驅(qū)動(dòng),來解決特定環(huán)境下的類加載問題掸宛。
- SingleConnectionDataSource:在每個(gè)連接請(qǐng)求時(shí)都會(huì)返回同一個(gè)連接死陆。
- JNDI查找的數(shù)據(jù)源,好處是數(shù)據(jù)源可以在應(yīng)用程序之外進(jìn)行管理唧瘾。
- 連接池?cái)?shù)據(jù)源措译,Spring并沒有提供實(shí)現(xiàn),需要依賴開源實(shí)現(xiàn)饰序,配置方式與JDBC驅(qū)動(dòng)的配置相似领虹。
- Apache Commons DBCP。
- c3p0求豫。
- BoneCP塌衰。
- 嵌入式數(shù)據(jù)源,比如H2數(shù)據(jù)庫注祖。
JDBC模板
- JdbcTemplate:最基本的JDBC模板猾蒂,這個(gè)模板支持簡單的JDBC數(shù)據(jù)庫訪問功能以及基于索引參數(shù)的查詢。該模板通過使用自定義的RowMapper來映射數(shù)據(jù)庫字段到Java模型類中是晨。
- NamedParameterJdbcTemplate:使用該模板類執(zhí)行查詢時(shí)可以將值以命名參數(shù)的形式綁定到SQL中肚菠,而不是使用簡單的索引參數(shù)。
- SimpleJdbcTemplate:該模板類利用Java5的一些特性如自動(dòng)裝箱罩缴、泛型以及可變參數(shù)列表來簡化JDBC模板的使用蚊逢。
緩存
Spring提供了多種緩存管理器的實(shí)現(xiàn),具體選擇哪一種取決于想要使用的底層緩存供應(yīng)商箫章。
通過在JavaConfig類上添加@EnableCaching注解來啟用緩存烙荷,然后在類中配置緩存管理器、緩存管理器工廠和模板檬寂。
使用緩存
如下注解可以放在方法或者類上:
- @Cacheable:如果有緩存則返回緩存终抽,否則執(zhí)行并且添加緩存。參數(shù)如下:
- value:緩存名稱。
- condition:SpEL表達(dá)式昼伴,執(zhí)行結(jié)果為true才應(yīng)用緩存匾旭。
- key:SpEL表達(dá)式,計(jì)算緩存的key圃郊,可以根據(jù)傳入或者返回參數(shù)來自定義价涝。
- unless:SpEL表達(dá)式,執(zhí)行結(jié)果為true則不存緩存持舆。
- @CachePut:方法使用都會(huì)被調(diào)用色瘩,并且添加緩存。參數(shù)類似@Cacheable注解逸寓。
- @CacheEvict:清除緩存居兆。
- @Caching:分組注解,能夠同時(shí)應(yīng)用多個(gè)其他注解席覆。
一些省略的內(nèi)容
- 視圖渲染:因?yàn)楝F(xiàn)在通用的架構(gòu)已經(jīng)實(shí)現(xiàn)了前后端分離史辙,所以前端使用流行的框架是更合理的選擇,而無需在后端使用視圖了佩伤。
- NoSql數(shù)據(jù)庫:不同的NoSql數(shù)據(jù)庫的設(shè)計(jì)和操作都不盡相同聊倔,但總歸就是Spring提供一個(gè)模板,然后操作即可生巡。
- RPC和WebSocket:現(xiàn)在已經(jīng)不流行這種方式了耙蔑,可以嘗試一下Spring Cloud微服務(wù)框架。
- 消息機(jī)制:一般的后端開發(fā)較少使用孤荣,微服務(wù)框架中會(huì)比較常用甸陌。