1. 程式人生 > >springBoot的常用註解

springBoot的常用註解

springboot註解:

@Service: 註解在類上,表示這是一個業務層bean @Controller: 註解在類上,表示這是一個控制層bean @Repository: 註解在類上,表示這是一個數據訪問層bean @Component: 註解在類上,表示通用bean ,value不寫預設就是類名首字母小寫 @Autowired: 按型別注入.預設屬性required= true;當不能確定 Spring 容器中一定擁有某個類的Bean 時, 可以在需要自動注入該類 Bean 的地方可以使用 @Autowired(required = false), 這等於告訴Spring:在找不到匹配Bean時也不丟擲BeanCreationException 異常。@Autowired 和 @Qualifier 結合使用時,自動注入的策略就從 byType 轉變byName 了。@Autowired可以對成員變數、方法以及建構函式進行註釋,而 @Qualifier 的標註物件是成員變數、方法入參、建構函式入參。正是由於註釋物件的不同,所以 Spring 不將 @Autowired 和 @Qualifier 統一成一個註釋類。 @Resource:

按名稱裝配

區別: @Resource預設按照名稱方式進行bean匹配,@Autowired預設按照型別方式進行bean匹配 @Resource(importjavax.annotation.Resource;) 是J2EE的註解 @Autowired(importorg.springframework.beans.factory.annotation.Autowired;)是Spring的註解

@Configuration: 註解在類上,表示這是一個IOC容器,相當於spring的配置檔案,java配置的方式。 IOC容器的配置類一般與 @Bean 註解配合使用,用 @Configuration 註解類等價與 XML 中配置 beans,用@Bean 註解方法等價於 XML 中配置 bean。 @Bean:

註解在方法上,聲明當前方法返回一個Bean

@Scope:註解在類上,描述spring容器如何建立Bean例項。

(1)singleton: 表示在spring容器中的單例,通過spring容器獲得該bean時總是返回唯一的例項

(2)prototype: 表示每次獲得bean都會生成一個新的物件

(3)request: 表示在一次http請求內有效(只適用於web應用)

(4)session: 表示在一個使用者會話內有效(只適用於web應用)

(5)globalSession: 表示在全域性會話內有效(只適用於web應用)

在多數情況,我們只會使用singleton和prototype兩種scope,如果未指定scope屬性,預設為singleton

@Value: 註解在變數上,從配置檔案中讀取。 例如:@Value(value = “#{message}”)

@ConfigurationProperties: 註解在類上,主要用來把properties配置檔案轉化為bean來使用的,要配合@EnableConfigurationProperties註解使用,@EnableConfigurationProperties註解的作用是使@ConfigurationProperties註解生效

@Profile: 註解在方法類上,在不同情況下選擇例項化不同的Bean,特定環境下生效

@SpringBootApplication:@[email protected][email protected][email protected],約定優於配置

@EnableAutoConfiguration: 啟用 Spring 應用程式上下文的自動配置,試圖猜測和配置您可能需要的bean。自動配置類通常採用基於你的classpath 和已經定義的 beans 物件進行應用。被 @EnableAutoConfiguration 註解的類所在的包有特定的意義,並且作為預設配置使用。通常推薦將 @EnableAutoConfiguration 配置在 root 包下,這樣所有的子包、類都可以被查詢到。

@ComponentScan: 註解在類上,掃描標註了@Controller等註解的類,註冊為bean 。@ComponentScan 為 @Configuration註解的類配置元件掃描指令。@ComponentScan 註解會自動掃描指定包下的全部標有 @Component註解的類,並註冊成bean,當然包括 @Component下的子註解@Service、@Repository、@Controller。

@RestController: @RestController 是一個結合了 @ResponseBody 和 @Controller 的註解

@Responsebody: 註解表示該方法的返回的結果直接寫入 HTTP 響應正文(ResponseBody)中,一般在非同步獲取資料時使用,通常是在使用 @RequestMapping 後,返回值通常解析為跳轉路徑,加上@Responsebody 後返回結果不會被解析為跳轉路徑,而是直接寫入HTTP 響應正文中。

@RequestBody: 1. 該註解用於讀取Request請求的body部分資料,使用系統預設配置的HttpMessageConverter進行解析,然後把相應的資料繫結到要返回的物件上。2. 再把HttpMessageConverter返回的物件資料繫結到 controller中方法的引數上。

@PathVariable和@RequestParam: 兩者的作用也是將request裡的引數的值繫結到contorller的方法引數裡的,區別在於,URL寫法不同。

使用@RequestParam時,URL是這樣的:http://host:port/path?引數名=引數值

使用@PathVariable時,URL是這樣的:

不寫的時候也可以獲取到引數值,但是必須名稱對應。引數可以省略不寫

當請求引數username不存在時會有異常發生,可以通過設定屬性required=false解決,例如:

@RequestParam(value=“username”,required=false)

三者的區別:

1. GET、POST方式提時, 根據request header Content-Type的值來判斷

a) application/x-www-form-urlencoded格式, 可選(即非必須,因為這種情況的資料@RequestParam, @ModelAttribute也可以處理,當然@RequestBody也能處理); b) multipart/form-data格式, 不能處理(即使用@RequestBody不能處理這種格式的資料); c) 其他格式, 必須(其他格式包括application/json, application/xml等。這些格式的資料,必須使用@RequestBody來處理);

2. PUT方式提交時, 根據request header Content-Type的值來判斷: a) application/x-www-form-urlencoded格式, 必須; b) multipart/form-data格式, 不能處理; c) 其他格式, 必須;

說明:request的body部分的資料編碼格式由header部分的Content-Type指定;

@RequestMapping:和請求報文是做對應的     a:value,指定請求的地址   b:method 請求方法型別 這個不寫的話,自適應:get,post或者put   c:consumes 請求的提交內容型別   d:produces 指定返回的內容型別 僅當request請求頭中的(Accept)型別中包含該指定型別才返回   e: params 指定request中必須包含某些引數值   f:headers 指定request中必須包含指定的header值   g: name 指定對映的名稱

@RequestMapping(method = RequestMethod.GET)

@RequestMapping(method = RequestMethod.POST)

@RequestMapping(method = RequestMethod.PUT)

@RequestMapping(method = RequestMethod.DELETE)

當然也可以使用

@GetMapping

@PostMapping

@PutMapping

@DeleteMapping 這與上面的是一樣的效果

@EnablCaching ,@EnableCaching: 註解是spring framework中的註解驅動的快取管理功能。自spring版本3.1起加入了該註解。如果你使用了這個註解,那麼你就不需要在XML檔案中配置cache manager了。

@suppresswarnings 抑制警告

@Modifying 如果是增,改,刪加上此註解

1:方法的返回值應該是int,表示更新語句所影響的行數。

2:在呼叫的地方必須加事務,沒有事務不能正常執行。@Transactional 事務註解

@Query 自定義查詢語句 JPQL

JPA註解

@Entity:

@Table(name=“”): 註解在類上表明這是一個實體類。一般用於jpa這兩個註解一般一塊使用,但是如果表名和實體類名相同的話,@Table可以省略

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

@Column: 通過@Column註解設定,包含的設定如下 name:資料庫表字段名 unique:是否唯一 nullable:是否可以為空 Length:長度 inserttable:是否可以插入 updateable:是否可以更新 columnDefinition: 定義建表時建立此列的DDL secondaryTable: 從表名。如果此列不建在主表上(預設建在主表),該屬性定義該列所在從表的名字。 例如:

@Column(name = "user_code", nullable = false, length=32)//設定屬性userCode對應的欄位為user_code,長度為32,非空     
private String userCode;     
@Column(name = "user_wages", nullable = true, precision=12,scale=2)//設定屬性wages對應的欄位為user_wages,12位數字可保留兩位小數,可以為空