Spring Boot(十六):Spring Boot經常使用註解介紹及使用

1、項目配置註解html

一、@SpringBootApplication前端

這是一個註解組合,包括了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan註解。java

(1) @SpringBootConfiguration 繼承自@Configuration,對於熟悉spring的開發者而言,此標註噹噹前類是配置類,並會將當前類內聲明的一個或多個以@Bean註解標記的方法的實例歸入到spring容器中,而且實例名就是方法名。web

(2)@EnableAutoConfiguration 這個註解就是springboot能自動進行配置的魔法所在。主要經過此註解,能將全部符合自動配置條件的bean的定義加載到spring容器中,好比根據spring-boot-starter-web,來判斷你的項目是否須要添加webmvc和tomcat,就會自動的幫你配置web項目中所須要的默認配置。須要排除一些無需自動配置的類時,可利用exclude進行排除。spring

(3)@ComponentScan 會掃描當前包及其子包下被@Component, @Controller,@Service,@Repository 等註解標記的類並歸入到spring容器中進行管理數據庫

二、@MapperScanjson

springboot支持mybatis組件的一個註解,經過此註解指定mybatis接口類的路徑,便可完成對mybatis接口的掃描。後端

它和@mapper註解是同樣的做用,不一樣的地方是掃描入口不同。@mapper須要加在每個mapper接口類上面。因此大多數狀況下,都是在規劃好工程目錄以後,經過@MapperScan註解配置路徑完成mapper接口的注入。跨域

添加mybatis相應組建依賴以後。就可使用該註解。緩存

三、資源導入註解

@ImportResource、@Import、@PropertySource這三個註解都是用來導入自定義的一些配置文件。

@ImportResource(locations={}) 導入其餘xml配置文件,須要標準在主配置類上。

導入property的配置文件 @PropertySource指定文件路徑,這個至關於使用spring的<importresource/>標籤來完成配置項的引入。

@import註解是一個能夠將普通類導入到spring容器中作管理

2、controller層

一、@Controller和@RestController

@RestController是spring4以後加入的註解,本來在@Controller中返回json須要@ResponseBody來配合,若是直接用@RestController替代@Controller就不須要再配置@ResponseBody,默認返回json格式。而@Controller是用來建立處理http請求的對象,通常結合@RequestMapping使用。

二、@CrossOrigin

@CrossOrigin(origins="",maxAge=1000)

這個註解主要是爲了解決跨域訪問的問題。這個註解能夠爲整個controller配置啓用跨域,也能夠在方法級別啓用。

咱們在項目中使用這個註解是爲了解決微服務在作定時任務調度編排的時候,會訪問不到spider節點而出現跨域問題。

三、@Autowired

自動裝配。

須要從bean工廠中獲取一個bean時,spring會自動爲咱們裝配該bean中標記爲@Autowired的元素。

四、@EnableCaching

這個註解是spring framework中的註解驅動的緩存管理功能。做用至關於spring配置文件中的cache manager標籤。

五、@RequestMapping

一個用來處理請求地址映射的註解,可用於類和方法上。用於類上,表示類中的全部響應請求的方法都是以該地址做爲父路徑。

經常使用屬性:

(1)value:指定請求的實際地址,指定的地址能夠是URI Template模式;

(2)method:指定請求的method方法,GET、POST、PUT、DELETE等;

(3)consumes:指定處理請求的提交內容類型(content-type),例如application/json、text/html;

(4)produces: 指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回;

(5) params: 指定request中必須包含某些參數值是,才讓該方法處理。

(6)headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請求。

經常使用的就是value和method。

其簡化註解有:

@GetMapping 等同於 @RequestMapping(method = RequestMethod.GET)
@PostMapping 等同於 @RequestMapping(method = RequestMethod.POST)
@PutMapping 等同於 @RequestMapping(method = RequestMethod.PUT)
@DeleteMapping 等同於 @RequestMapping(method = RequestMethod.DELETE)
@PatchMapping 等同於 @RequestMapping(method = RequestMethod.PATCH)

六、@RequestBody和@ResponseBody

@RequestBody註解容許request的參數在reqeust體中,經常結合前端POST請求,進行先後端交互。

@ResponseBody註解支持將的參數在reqeust體中,一般返回json格式給前端。

七、@PathVariable、@RequestParam、@RequestAttribute

@PathVariable用來接收參數,如/path/001,可接收001做爲參數

@GetMapping("/path/{id}")
public String PathVariable(@PathVariable("id")String id){
    return "id:"+id;
}

@RequestParam 用來接收URL中的參數,如/param?id=001,可接收001做爲參數

@GetMapping("/param")
public String param(@RequestParam("id")String id){
    return "id:"+id;
}

@RequestAttribute用於訪問由過濾器或攔截器建立的、預先存在的請求屬性,效果等同與request.getAttrbute()。

@GetMapping("/req/attr")
public String reqAttr(@RequestAttribute("id")String id){
    return "id:"+id;
}

八、@ModelAttribute

主要是綁定請求參數到指定對象上,此註解可被用於方法、參數上。

運用在參數上,會將客戶端傳遞過來的參數按名稱注入到指定對象中,而且會將這個對象自動加入到modelMap中,便於view層使用;

運用在方法上,會在每個@RequestMapping標註的方法前執行,若是有返回值,則自動將返回值加入到ModelMap中;

因爲如今都採用先後端分離開發,故此註解相對用的較少,但對於一些在每次請求前須要進行一些額外操做時。使用此註解依然是個選擇,好比進行統一的業務校驗等,但使用此註解實現相似功能時須要注意,使用異步調用時,好比callable或者DeferredResult時,被此註解的方法會執行兩次,由於異步請求時,是掛起另外一個線程去從新執行,對於配置了攔截器,它們的執行順序爲:

preHandle ---->
afterConcurrentHandlingStarted ----> 
Controller---->
preHandler----> 
postHandler ----> 
afterCompletion

3、service層註解、持久層註解

一、@Component、@Service、@Repository

這三者都是申明一個單例的bean類並歸入spring容器中,後二者其實都是繼承於@Component。

(1) @Component 最普通的組件,能夠被注入到spring容器進行管理。

經過這個註解的分層管理,就能將請求處理,業務邏輯處理,數據庫操做處理分離出來,爲代碼解耦,也方便了之後項目的維護和開發。

因此咱們在正常開發中,若是能用@Service, @Controller, @Repository其中一個標註這個類的定位的時候,就不要用@Component來標註。

(2) @Repository 做用於持久層

(3) @Service 做用於業務邏輯層

一般一些類沒法確實是使用@service仍是@Component時,註解使用@Component,好比Redis的配置類等。

二、@Transational

經過這個註解能夠聲明事務,能夠添加在類上或者方法上。

在spring boot中 不用再單獨配置事務管理,通常狀況是咱們會在servcie層添加了事務註解,便可開啓事務。要注意的是,事務的開啓只能在public 方法上。而且主要事務切面的回滾條件。正常咱們配置rollbackfor exception時 ,若是在方法裏捕獲了異常就會致使事務切面配置的失效。

相關文章
相關標籤/搜索