SpringBoot注解(舉一反三,發(fā)散思維)-創(chuàng)新互聯(lián)

【前言】

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的白云鄂網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

前些日子,咱們一起學(xué)習(xí)過Java里面的注解。今天呢,就學(xué)習(xí)一下Springboot注解,從框架的組成原理上一點(diǎn)點(diǎn)的熟悉這個(gè)框架。

【Spring】

提到SpringBoot那你就得先了解Spring是什么?因?yàn)镾pringBoot是一個(gè)簡(jiǎn)化Spring開發(fā)的框架。

A、Spring是一個(gè)輕量級(jí)控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架;

控制反轉(zhuǎn)——Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合

面向切面——Spring提供了面向切面編程的豐富支持

B、Spring的Web模塊;

Web上下文模塊建立于應(yīng)用上下文模塊之上,提供了一個(gè)適合于Web應(yīng)用的上下文。另外,這個(gè)模塊還提供了一些面向服務(wù)支持。例如:實(shí)現(xiàn)文件上傳的multipart請(qǐng)求,它也提供了Spring和其它Web框架的集成,比如Struts、WebWork。

C、Spring的MVC框架;

Spring為構(gòu)建Web應(yīng)用提供了一個(gè)功能全面的MVC框架。雖然Spring可以很容易地與其它MVC框架集成,例如Struts,但Spring的MVC框架使用IoC對(duì)控制邏輯和業(yè)務(wù)對(duì)象提供了完全的分離。

它也允許你聲明性地將請(qǐng)求參數(shù)綁定到你的業(yè)務(wù)對(duì)象中,此外,Spring的MVC框架還可以利用Spring的任何其它服務(wù),例如國(guó)際化信息與驗(yàn)證。

********

【Springmvc架構(gòu)原理解析】

第一步:發(fā)起請(qǐng)求到前端控制器(DispatcherServlet)

第二步:前端控制器請(qǐng)求HandlerMapping查找 Handler可以根據(jù)xml配置、注解進(jìn)行查找

第三步:處理器映射器HandlerMapping向前端控制器返回Handler

第四步:前端控制器調(diào)用處理器適配器去執(zhí)行Handler

第五步:處理器適配器去執(zhí)行Handler

第六步:Handler執(zhí)行完成給適配器返回ModelAndView

第七步:處理器適配器向前端控制器返回ModelAndView

ModelAndView是springmvc框架的一個(gè)底層對(duì)象,包括 Model和view

第八步:前端控制器請(qǐng)求視圖解析器去進(jìn)行視圖解析

根據(jù)邏輯視圖名解析成真正的視圖(jsp)

第九步:視圖解析器向前端控制器返回View

第十步:前端控制器進(jìn)行視圖渲染

視圖渲染將模型數(shù)據(jù)(在ModelAndView對(duì)象中)填充到request域

第十一步:前端控制器向用戶響應(yīng)結(jié)果

組件:

①、前端控制器DispatcherServlet(不需要程序員開發(fā))作用接收請(qǐng)求,響應(yīng)結(jié)果,相當(dāng)于轉(zhuǎn)發(fā)器,中央處理器。有了DispatcherServlet減少了其它組件之間的耦合度。

②、處理器映射器HandlerMapping(不需要程序員開發(fā))作用:根據(jù)請(qǐng)求的url查找Handler

3、處理器適配器HandlerAdapter作用:按照特定規(guī)則(HandlerAdapter要求的規(guī)則)去執(zhí)行Handler

③、處理器Handler(需要程序員開發(fā))注意:編寫Handler時(shí)按照HandlerAdapter的要求去做,這樣適配器才可以去正確執(zhí)行Handler

④、視圖解析器View resolver(不需要程序員開發(fā))作用:進(jìn)行視圖解析,根據(jù)邏輯視圖名解析成真正的視圖(view)

⑤、視圖View(需要程序員開發(fā)jsp)View是一個(gè)接口,實(shí)現(xiàn)類支持不同的View類型(jsp、freemarker、pdf…)

*******

【SpringMVC常用注解】

@Controller

負(fù)責(zé)注冊(cè)一個(gè)bean 到spring 上下文中

@RequestMapping

注解為控制器指定可以處理哪些 URL 請(qǐng)求

@RequestBody

該注解用于讀取Request請(qǐng)求的body部分?jǐn)?shù)據(jù),使用系統(tǒng)默認(rèn)配置的HttpMessageConverter進(jìn)行解析,然后把相應(yīng)的數(shù)據(jù)綁定到要返回的對(duì)象上 ,再把HttpMessageConverter返回的對(duì)象數(shù)據(jù)綁定到 controller中方法的參數(shù)上

@ResponseBody

該注解用于將Controller的方法返回的對(duì)象,通過適當(dāng)?shù)腍ttpMessageConverter轉(zhuǎn)換為指定格式后,寫入到Response對(duì)象的body數(shù)據(jù)區(qū)

@ModelAttribute

在方法定義上使用 @ModelAttribute 注解:Spring MVC 在調(diào)用目標(biāo)處理方法前,會(huì)先逐個(gè)調(diào)用在方法級(jí)上標(biāo)注了@ModelAttribute 的方法

在方法的入?yún)⑶笆褂?@ModelAttribute 注解:可以從隱含對(duì)象中獲取隱含的模型數(shù)據(jù)中獲取對(duì)象,再將請(qǐng)求參數(shù) –綁定到對(duì)象中,再傳入入?yún)⒎椒ㄈ雲(yún)?duì)象添加到模型中

@RequestParam

在處理方法入?yún)⑻幨褂?@RequestParam 可以把請(qǐng)求參 數(shù)傳遞給請(qǐng)求方法

@PathVariable

綁定 URL 占位符到入?yún)?/p>

@ExceptionHandler

注解到方法上,出現(xiàn)異常時(shí)會(huì)執(zhí)行該方法

@ControllerAdvice

使一個(gè)Contoller成為全局的異常處理類,類中用@ExceptionHandler方法注解的方法可以處理所有Controller發(fā)生的異常

【SpringMVC與Struts2區(qū)別比較】

A、spring mvc 和 struts2的加載機(jī)制不同:spring mvc的入口是servlet,而struts2是filter(servlet和filter區(qū)別見本文最后)

B、Struts2框架是類級(jí)別的攔截

C、SpringMVC是方法級(jí)別的攔截

【JPA注解

@Entity:表明這是一個(gè)實(shí)體類。

@MappedSuperClass:用在確定是父類的entity上。父類的屬性子類可以繼承。

@NoRepositoryBean:一般用作父類的repository,有這個(gè)注解,spring不會(huì)去實(shí)例化該repository。

@Column:如果字段名與列名相同,則可以省略。

@Id:表示該屬性為主鍵。

@JoinColumn(name=”loginId”):一對(duì)一:本表中指向另一個(gè)表的外鍵。一對(duì)多:另一個(gè)表指向本表的外鍵。

@OneToOne、@OneToMany、@ManyToOne:對(duì)應(yīng)hibernate配置文件中的一對(duì)一,一對(duì)多,多對(duì)一。

【全局異常注解】

@ControllerAdvice:包含@Component??梢员粧呙璧?。統(tǒng)一處理異常。

@ExceptionHandler(Exception.class):用在方法上面表示遇到這個(gè)異常就執(zhí)行以下方法。

【項(xiàng)目中具體配置解析和使用環(huán)境注解】

@MappedSuperclass:

1.@MappedSuperclass 注解使用在父類上面,是用來標(biāo)識(shí)父類的

2.@MappedSuperclass 標(biāo)識(shí)的類表示其不能映射到數(shù)據(jù)庫(kù)表,因?yàn)槠洳皇且粋€(gè)完整的實(shí)體類,但是它所擁有的屬性能夠映射在其子類對(duì)用的數(shù)據(jù)庫(kù)表中

3.@MappedSuperclass 標(biāo)識(shí)的類不能再有@Entity或@Table注解

@Column:

1.當(dāng)實(shí)體的屬性與其映射的數(shù)據(jù)庫(kù)表的列不同名時(shí)需要使用@Column標(biāo)注說明,該屬性通常置于實(shí)體的屬性聲明語句之前,還可與 @Id 標(biāo)注一起使用。

2.@Column 標(biāo)注的常用屬性是name,用于設(shè)置映射數(shù)據(jù)庫(kù)表的列名。此外,該標(biāo)注還包含其它多個(gè)屬性,如:unique、nullable、length、precision等。

【執(zhí)行持久化方法,按發(fā)生時(shí)間執(zhí)行的回調(diào)函數(shù)】

@javax.persistence.PostLoad:加載后。

@javax.persistence.PrePersist:持久化前。

@javax.persistence.PostPersist:持久化后。

@javax.persistence.PreUpdate:更新前。

@javax.persistence.PostUpdate:更新后。

@javax.persistence.PreRemove:刪除前。

@javax.persistence.PostRemove:刪除后。

【數(shù)據(jù)庫(kù)注解】

1)增

@PrePersist和@PostPersist事件在實(shí)體對(duì)象插入到數(shù)據(jù)庫(kù)的過程中發(fā)生:

@PrePersist事件在調(diào)用persist()方法后立刻發(fā)生,此時(shí)的數(shù)據(jù)還沒有真正插入進(jìn)數(shù)據(jù)庫(kù)。

@PostPersist事件在數(shù)據(jù)已經(jīng)插入進(jìn)數(shù)據(jù)庫(kù)后發(fā)生。

2)刪

@PreRemove和@PostRemove事件的觸發(fā)由刪除實(shí)體引起:

@PreRemove事件在實(shí)體從數(shù)據(jù)庫(kù)刪除之前觸發(fā),即在調(diào)用remove()方法刪除時(shí)發(fā)生,此時(shí)的數(shù)據(jù)還沒有真正從數(shù)據(jù)庫(kù)中刪除。

@PostRemove事件在實(shí)體從數(shù)據(jù)庫(kù)中刪除后觸發(fā)。

3)改

@PreUpdate和@PostUpdate事件的觸發(fā)由更新實(shí)體引起:

@PreUpdate事件在實(shí)體的狀態(tài)同步到數(shù)據(jù)庫(kù)之前觸發(fā),此時(shí)的數(shù)據(jù)還沒有真正更新到數(shù)據(jù)庫(kù)。

@PostUpdate事件在實(shí)體的狀態(tài)同步到數(shù)據(jù)庫(kù)之后觸發(fā),同步在事務(wù)提交時(shí)發(fā)生。

4)查

@PostLoad事件在下列情況下觸發(fā):

執(zhí)行EntityManager.find()或getreference()方法載入一個(gè)實(shí)體后。

執(zhí)行JPQL查詢后。

EntityManager.refresh()方法被調(diào)用后。



分享標(biāo)題:SpringBoot注解(舉一反三,發(fā)散思維)-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://muchs.cn/article18/cshddp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、網(wǎng)站排名、Google、網(wǎng)站營(yíng)銷、營(yíng)銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化