Spring4框架學(xué)習(xí)筆記

概述

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)建切面

定義切面的語法
image.png
  • 常見的操作符有&&、||和!刻两。
  • 常見的指示器有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ì)比較常用甸陌。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市盐股,隨后出現(xiàn)的幾起案子钱豁,更是在濱河造成了極大的恐慌,老刑警劉巖疯汁,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牲尺,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡幌蚊,警方通過查閱死者的電腦和手機(jī)谤碳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來溢豆,“玉大人蜒简,你說我怎么就攤上這事′鱿桑” “怎么了搓茬?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵犹赖,是天一觀的道長。 經(jīng)常有香客問我卷仑,道長冷尉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任系枪,我火速辦了婚禮,結(jié)果婚禮上磕谅,老公的妹妹穿的比我還像新娘私爷。我一直安慰自己,他們只是感情好膊夹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布衬浑。 她就那樣靜靜地躺著,像睡著了一般放刨。 火紅的嫁衣襯著肌膚如雪工秩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天进统,我揣著相機(jī)與錄音助币,去河邊找鬼。 笑死螟碎,一個(gè)胖子當(dāng)著我的面吹牛眉菱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掉分,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼俭缓,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了酥郭?” 一聲冷哼從身側(cè)響起华坦,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎不从,沒想到半個(gè)月后惜姐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡消返,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年载弄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撵颊。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宇攻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出倡勇,到底是詐尸還是另有隱情逞刷,我是刑警寧澤嘉涌,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站夸浅,受9級(jí)特大地震影響仑最,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜帆喇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一警医、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坯钦,春花似錦预皇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至突颊,卻和暖如春鲁豪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背律秃。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工爬橡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人友绝。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓堤尾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親迁客。 傳聞我的和親對(duì)象是個(gè)殘疾皇子郭宝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)掷漱,斷路器粘室,智...
    卡卡羅2017閱讀 134,651評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,804評(píng)論 6 342
  • 什么是Spring Spring是一個(gè)開源的Java EE開發(fā)框架。Spring框架的核心功能可以應(yīng)用在任何Jav...
    jemmm閱讀 16,461評(píng)論 1 133
  • 偶爾給網(wǎng)友們畫畫自拍卜范,我也算是一個(gè)網(wǎng)絡(luò)畫手衔统,一年多前網(wǎng)絡(luò)上流行過一陣子畫自拍,還專門有APP為此而生海雪,然而我沒見到...
    我是KiShua閱讀 663評(píng)論 1 4
  • 新的一周開始了锦爵,今天陽光明媚,心情也格外好奥裸,閨女早早的起來了险掀,吃罷早飯,7:15準(zhǔn)時(shí)出發(fā)去學(xué)校湾宙,慶幸住在學(xué)...
    其樂媽咪閱讀 416評(píng)論 0 0