讀懂這些spring boot的核心註解,快速配置完成專案搭建

宜信技術學院發表於2019-06-13

在spring boot中,摒棄了spring以往專案中大量繁瑣的配置,遵循 約定大於配置 的原則,透過自身預設配置,極大的降低了專案搭建的複雜度。同樣在spring boot中,大量註解的使用,使得程式碼看起來更加簡潔,提高開發的效率。這些註解不光包括spring boot自有,也有一些是繼承自spring的。

本文將spring boot專案中常用的一些核心註解歸類總結,並結合實際使用的角度來解釋其作用。

一、專案配置註解

1、@SpringBootApplication 註解

檢視原始碼可發現,@SpringBootApplication是一個複合註解,包含了@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan這三個註解。

這三個註解的作用分別為:

  • @SpringBootConfiguration:標註當前類是配置類,這個註解繼承自@Configuration。並會將當前類內宣告的一個或多個以@Bean註解標記的方法的例項納入到srping容器中,並且例項名就是方法名。

  • @EnableAutoConfiguration:是自動配置的註解,這個註解會根據我們新增的元件jar來完成一些預設配置,我們做微服時會新增spring-boot-starter-web這個元件jar的pom依賴,這樣配置會預設配置springmvc 和tomcat。

  • @ComponentScan:掃描當前包及其子包下被@Component,@Controller,@Service,@Repository註解標記的類並納入到spring容器中進行管理。等價於

大多數情況下,這3個註解會被同時使用,基於最佳實踐,這三個註解就被做了包裝,成為了@SpringBootApplication註解。

2、@ServletComponentScan:Servlet、Filter、Listener 可以直接透過 @WebServlet、@WebFilter、@WebListener 註解自動註冊,這樣透過註解servlet ,攔截器,監聽器的功能而無需其他配置,所以這次相中使用到了filter的實現,用到了這個註解。

3、@MapperScan:spring-boot支援mybatis元件的一個註解,透過此註解指定mybatis介面類的路徑,即可完成對mybatis介面的掃描。

它和@mapper註解是一樣的作用,不同的地方是掃描入口不一樣。@mapper需要加在每一個mapper介面類上面。所以大多數情況下,都是在規劃好工程目錄之後,透過@MapperScan註解配置路徑完成mapper介面的注入。

新增mybatis相應組建依賴之後。就可以使用該註解。

進一步檢視mybatis-spring-boot-starter包,可以找到這裡已經將mybatis做了包裝。

這也是spring的一個理念,不重複造輪子,整合優秀的資源進入spring的體系中。

4、資源匯入註解:@ImportResource @Import @PropertySource 這三個註解都是用來匯入自定義的一些配置檔案。

@ImportResource(locations={}) 匯入其他xml配置檔案,需要標準在主配置類上。

匯入property的配置檔案 @PropertySource指定檔案路徑,這個相當於使用spring的

@import註解是一個可以將普通類匯入到spring容器中做管理

二、controller 層

1、@Controller 表明這個類是一個控制器類,和@RequestMapping來配合使用攔截請求,如果不在method中註明請求的方式,預設是攔截get和post請求。這樣請求會完成後轉向一個檢視解析器。但是在大多微服務搭建的時候,前後端會做分離。所以請求後端只關注資料處理,後端返回json資料的話,需要配合@ResponseBody註解來完成。

這樣一個只需要返回資料的介面就需要3個註解來完成,大多情況我們都是需要返回資料。也是基於最佳實踐,所以將這三個註解進一步整合。

@RestController 是@Controller 和@ResponseBody的結合,一個類被加上@RestController 註解,資料介面中就不再需要新增@ResponseBody。更加簡潔。

同樣的情況,@RequestMapping(value="",method= RequestMethod.GET ),我們都需要明確請求方式。這樣的寫法又會顯得比較繁瑣,於是乎就有了如下的幾個註解。

普通風格 Rest風格
@RequestMapping(value=“”,method = RequestMethod.GET) @GetMapping(value =“”)
@RequestMapping(value=“”,method = RequestMethod.POST) @PostMapping(value =“”)
@RequestMapping(value=“”,method = RequestMethod.PUT) @PutMapping(value =“”)
@RequestMapping(value=“”,method = RequestMethod.DELETE) @DeleteMapping(value =“”)

這幾個註解是 @RequestMapping(value="",method= RequestMethod.xxx )的最佳實踐。為了程式碼的更加簡潔。

2、@CrossOrigin:@CrossOrigin(origins = "", maxAge = 1000) 這個註解主要是為了解決跨域訪問的問題。這個註解可以為整個controller配置啟用跨域,也可以在方法級別啟用。

我們在專案中使用這個註解是為了解決微服在做定時任務排程編排的時候,會訪問不同的spider節點而出現跨域問題。

3、@Autowired:這是個最熟悉的註解,是spring的自動裝配,這個個註解可以用到構造器,變數域,方法,註解型別上。當我們需要從bean 工廠中獲取一個bean時,Spring會自動為我們裝配該bean中標記為@Autowired的元素。

4、@EnablCaching@EnableCaching: 這個註解是spring framework中的註解驅動的快取管理功能。自spring版本3.1起加入了該註解。其作用相當於spring配置檔案中的cache manager標籤。

5、@PathVariable:路徑變數註解,@RequestMapping中用{}來定義url部分的變數名,如:

同樣可以支援變數名加正規表示式的方式,變數名:[正規表示式]。

三、servcie層註解

1、@Service:這個註解用來標記業務層的元件,我們會將業務邏輯處理的類都會加上這個註解交給spring容器。事務的切面也會配置在這一層。當讓 這個註解不是一定要用。有個泛指元件的註解,當我們不能確定具體作用的時候 可以用泛指元件的註解託付給spring容器。  

2、@Resource:@Resource和@Autowired一樣都可以用來裝配bean,都可以標註欄位上,或者方法上。 @resource註解不是spring提供的,是屬於J2EE規範的註解。

兩個之前的區別就是匹配 方式上有點不同,@Resource預設按照名稱方式進行bean匹配,@Autowired預設按照型別方式進行bean匹配。

四、持久層註解

1、@Repository:@Repository註解類作為DAO物件,管理運算元據庫的物件。

總得來看,@Component, @Service, @Controller, @Repository是spring註解,註解後可以被spring框架所掃描並注入到spring容器來進行管理

@Component是通用註解,其他三個註解是這個註解的擴充,並且具有了特定的功能。

透過這些註解的分層管理,就能將請求處理,義務邏輯處理,資料庫操作處理分離出來,為程式碼解耦,也方便了以後專案的維護和開發。

所以我們在正常開發中,如果能用@Service, @Controller, @Repository其中一個標註這個類的定位的時候,就不要用@Component來標註。

2、@Transactional: 透過這個註解可以宣告事務,可以新增在類上或者方法上。

在spring boot中 不用再單獨配置事務管理,一般情況是我們會在servcie層新增了事務註解,即可開啟事務。要注意的是,事務的開啟只能在public 方法上。並且主要事務切面的回滾條件。正常我們配置rollbackfor exception時 ,如果在方法裡捕獲了異常就會導致事務切面配置的失效。

五、其他相關注解

@ControllerAdvice 和 @RestControllerAdvice:通常和@ExceptionHandler、@InitBinder、@ModelAttribute一起配合使用。

@ControllerAdvice 和 @ExceptionHandler 配合完成統一異常攔截處理。

@RestControllerAdvice 是 @ControllerAdvice 和 @ResponseBody的合集,可以將異常以json的格式返回資料。

如下面對資料異常返回的統一處理。

這裡是對平時用到的一些註解做了歸納,及應用說明。還有其他更深的知識還需要在後續的用中繼續學習。

參考文件

作者:緱應奎

來源:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69918724/viewspace-2647497/,如需轉載,請註明出處,否則將追究法律責任。

相關文章