SpringBoot之常用注解


在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容器中進行管理。等價於<context:component-scan>的xml配置文件中的配置項。

大多數情況下,這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的<importresource/>標簽來完成配置項的引入。

@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的格式返回數據。

如下面對數據異常返回的統一處理。

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

via:https://mp.weixin.qq.com/s/eE9bLX5invvMjGePprO2Ew

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM