SpringBoot註解(觸類旁通,發散思惟)

【前言】前端

前些日子,我們一塊兒學習過Java裏面的註解。今天呢,就學習一下Springboot註解,從框架的組成原理上一點點的熟悉這個框架。java

【Spring】程序員

提到SpringBoot那你就得先了解Spring是什麼?由於SpringBoot是一個簡化Spring開發的框架。spring

A、Spring是一個輕量級控制反轉(IoC)和麪向切面(AOP)的容器框架;數據庫

控制反轉——Spring經過一種稱做控制反轉(IoC)的技術促進了鬆耦合編程

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

B、Spring的Web模塊;mvc

Web上下文模塊創建於應用上下文模塊之上,提供了一個適合於Web應用的上下文。另外,這個模塊還提供了一些面向服務支持。例如:實現文件上傳的multipart請求,它也提供了Spring和其它Web框架的集成,好比Struts、WebWork。app

C、Spring的MVC框架;框架

Spring爲構建Web應用提供了一個功能全面的MVC框架。雖然Spring能夠很容易地與其它MVC框架集成,例如Struts,但Spring的MVC框架使用IoC對控制邏輯和業務對象提供了徹底的分離。

它也容許你聲明性地將請求參數綁定到你的業務對象中,此外,Spring的MVC框架還能夠利用Spring的任何其它服務,例如國際化信息與驗證。

********

【Springmvc架構原理解析】

第一步:發起請求到前端控制器(DispatcherServlet)

第二步:前端控制器請求HandlerMapping查找 Handler能夠根據xml配置、註解進行查找

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

第四步:前端控制器調用處理器適配器去執行Handler

第五步:處理器適配器去執行Handler

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

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

ModelAndView是springmvc框架的一個底層對象,包括 Model和view

第八步:前端控制器請求視圖解析器去進行視圖解析

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

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

第十步:前端控制器進行視圖渲染

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

第十一步:前端控制器向用戶響應結果

組件:

①、前端控制器DispatcherServlet(不須要程序員開發)做用接收請求,響應結果,至關於轉發器,中央處理器。有了DispatcherServlet減小了其它組件之間的耦合度。

②、處理器映射器HandlerMapping(不須要程序員開發)做用:根據請求的url查找Handler

三、處理器適配器HandlerAdapter做用:按照特定規則(HandlerAdapter要求的規則)去執行Handler

③、處理器Handler(須要程序員開發)注意:編寫Handler時按照HandlerAdapter的要求去作,這樣適配器才能夠去正確執行Handler

④、視圖解析器View resolver(不須要程序員開發)做用:進行視圖解析,根據邏輯視圖名解析成真正的視圖(view)

⑤、視圖View(須要程序員開發jsp)View是一個接口,實現類支持不一樣的View類型(jsp、freemarker、pdf…)

*******

【SpringMVC經常使用註解】

@Controller

負責註冊一個bean 到spring 上下文中

@RequestMapping

註解爲控制器指定能夠處理哪些 URL 請求

@RequestBody

該註解用於讀取Request請求的body部分數據,使用系統默認配置的HttpMessageConverter進行解析,而後把相應的數據綁定到要返回的對象上 ,再把HttpMessageConverter返回的對象數據綁定到 controller中方法的參數上

@ResponseBody

該註解用於將Controller的方法返回的對象,經過適當的HttpMessageConverter轉換爲指定格式後,寫入到Response對象的body數據區

@ModelAttribute

在方法定義上使用 @ModelAttribute 註解:Spring MVC 在調用目標處理方法前,會先逐個調用在方法級上標註了@ModelAttribute 的方法

在方法的入參前使用 @ModelAttribute 註解:能夠從隱含對象中獲取隱含的模型數據中獲取對象,再將請求參數 –綁定到對象中,再傳入入參將方法入參對象添加到模型中

@RequestParam

在處理方法入參處使用 @RequestParam 能夠把請求參 數傳遞給請求方法

@PathVariable

綁定 URL 佔位符到入參

@ExceptionHandler

註解到方法上,出現異常時會執行該方法

@ControllerAdvice

使一個Contoller成爲全局的異常處理類,類中用@ExceptionHandler方法註解的方法能夠處理全部Controller發生的異常

SpringMVC與Struts2區別比較】

A、spring mvc 和 struts2的加載機制不一樣:spring mvc的入口是servlet,而struts2是filter(servlet和filter區別見本文最後)

B、Struts2框架是類級別的攔截

C、SpringMVC是方法級別的攔截

【JPA註解

@Entity:代表這是一個實體類。

@MappedSuperClass:用在肯定是父類的entity上。父類的屬性子類能夠繼承。

@NoRepositoryBean:通常用做父類的repository,有這個註解,spring不會去實例化該repository。

@Column:若是字段名與列名相同,則能夠省略。

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

@JoinColumn(name=」loginId」):一對一:本表中指向另外一個表的外鍵。一對多:另外一個表指向本表的外鍵。

@OneToOne、@OneToMany、@ManyToOne:對應hibernate配置文件中的一對一,一對多,多對一。

【全局異常註解】

@ControllerAdvice:包含@Component。能夠被掃描到。統一處理異常。

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

項目中具體配置解析和使用環境註解

@MappedSuperclass:

1.@MappedSuperclass 註解使用在父類上面,是用來標識父類的

2.@MappedSuperclass 標識的類表示其不能映射到數據庫表,由於其不是一個完整的實體類,可是它所擁有的屬性可以映射在其子類對用的數據庫表中

3.@MappedSuperclass 標識的類不能再有@Entity或@Table註解

@Column:

1.當實體的屬性與其映射的數據庫表的列不一樣名時須要使用@Column標註說明,該屬性一般置於實體的屬性聲明語句以前,還可與 @Id 標註一塊兒使用。

2.@Column 標註的經常使用屬性是name,用於設置映射數據庫表的列名。此外,該標註還包含其它多個屬性,如:unique、nullable、length、precision等。

【執行持久化方法,按發生時間執行的回調函數】

@javax.persistence.PostLoad:加載後。

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

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

@javax.persistence.PreUpdate:更新前。

@javax.persistence.PostUpdate:更新後。

@javax.persistence.PreRemove:刪除前。

@javax.persistence.PostRemove:刪除後。

【數據庫註解】

1)增

@PrePersist和@PostPersist事件在實體對象插入到數據庫的過程當中發生:

@PrePersist事件在調用persist()方法後馬上發生,此時的數據尚未真正插入進數據庫。

@PostPersist事件在數據已經插入進數據庫後發生。

2)刪

@PreRemove和@PostRemove事件的觸發由刪除實體引發:

@PreRemove事件在實體從數據庫刪除以前觸發,即在調用remove()方法刪除時發生,此時的數據尚未真正從數據庫中刪除。

@PostRemove事件在實體從數據庫中刪除後觸發。

3)改

@PreUpdate和@PostUpdate事件的觸發由更新實體引發:

@PreUpdate事件在實體的狀態同步到數據庫以前觸發,此時的數據尚未真正更新到數據庫。

@PostUpdate事件在實體的狀態同步到數據庫以後觸發,同步在事務提交時發生。

4)查

@PostLoad事件在下列狀況下觸發:

執行EntityManager.find()或getreference()方法載入一個實體後。

執行JPQL查詢後。

EntityManager.refresh()方法被調用後。

相關文章
相關標籤/搜索