Spring常用註解一網打進
技術標籤:springspringjavaspring bootJPA註解
本文主要總結了Spring中常用、常見的註解,針對每一個註釋都闡述了具體的用法,希望對你有所幫助
@SpringBootApplication
這個註解算是Spring Boot專案的基石,所以單獨拎出來說一下,其在建立SpringBoot專案以後會預設在主類上加上。
@SpringBootApplication public class SpringSecurityJwtGuideApplication { public static void main(java.lang.String[] args) { SpringApplication.run(SpringSecurityJwtGuideApplication.class, args); } }
其可以看做@Configuration、@EnableAutoConfiguration、@ComponentScan註解的集合,其這三個註解的作用分別如下所示
- @EnableAutoConfiguration:啟動SpringBoot的自動裝配機制
- @ComponentScan:掃描被@Component(@Service、@Controller)註解的bean,註解預設會掃描該類所在包下所有的類
- @Configuration:執行在Spring上下文中註冊額外的bean或匯入其他配置類
Spring Bean 相關
@Autowired
自動匯入物件到類中,被注入進的類ton光要被Spring管理,比如Service類注入到Controller類中
@Service
public class TestService{
......
}
@RestController
@RequestMapping("/users")
public class TestController{
@Autowired
private TestService testService;
}
@Qualifier
當有多個同一型別的Bean時,可以使用@Qualifier(“name”)來指定。與@Autowired配合使用。其是根據名稱進行注入,而@Autowired根據型別注入。
@Component,@Repository,@Service,@Controller
我們一般使用@Autowired註解讓Spring容器幫我們自動裝配bean 。要想把類標識成可用於@Autowired註解自動裝配的bean類,可以採用以下註解實現
- @Component:通用註解,可標註任意類為Spring元件。如果一個Bean不知道屬於哪個層,可以使用@Component註解標註
- @Repository:對應持久層(Dao)主要用於資料庫相關操作
- @Service:對應服務層,主要涉及一些複雜的邏輯,需要用到Dao層
- @Controller:對應SpringMVC控制層、主要用於接收使用者請求並呼叫Service層返回資料給前端頁面。
@RestController
@RestController註解是@Controller和@ResponseBody的合集,表示這是個控制器bean,並且是將函式的返回值直接填入HTTP響應體中,是REST風格的控制器
單獨使用@Controller不加@ResponseBody的話一般使用在要返回一個檢視的情況,這種情況屬於比較傳統的Spring MVC的應用,對應前後端不分離的情況。@[email protected]返回JSON或XML形式資料
@Scope
宣告Spring Bean的作用域
@Bean
@Scope("singleton")
public Person personSingleton(){
return new Person();
}
常見的Bean的作用域
- singleton:單例,唯一Bean例項
- prototype:每次請求都會建立一個新的bean例項
- request:每一次HTTP請求都會產生一個新的bean,該bean僅在當前HTTP request內有效
- session:每一次HTTP請求都會產生一個新的Bean,該bean僅在當前HTTP session內有效
@Configuration
一般用來宣告配置類,可以使用@Component註解代替,不過使用@Configuration註解宣告配置類更加語義化
@Configuration
public class AppConfig{
@Bean
public TransferService transferService(){
return new TransferServiceImpl();
}
}
處理常見的HTTP請求型別
五種常見的請求型別
- GET:請求從伺服器獲取特定資源
- POST:在伺服器上建立一個新的資源
- PUT:更新伺服器上的資源(客戶端提供更新後的整個資源)
- DELETE:從伺服器上刪除特定的資源
- PATCH:更新伺服器上的資源(客戶端提供更改的屬性,可以看做是部分更新)
GET請求
@GetMapping(“users”)等價於@RequestMapping(value="/users",method=RequestMethod.GET)
POST請求
@PostMapping(“users”) 等價於@RequestMapping(value="/users",method=RequestMethod.POST)
PUT請求
@PutMapping("/users/{userId}") 等價於@RequestMapping(value="/users/{userId}",method=RequestMethod.PUT)
DELETE請求
@DeleteMapping("/users/{userId}")等價於@RequestMapping(value="/users/{userId}",method=RequestMethod.DELETE)
PATCH請求
一般實際專案中,都是PUT不夠用了採用PATCH請求去更新資料
前後端傳值
@pathVariable和@RequestParam
@PathVariable用於獲取路徑引數
@RequestParam使用者獲取查詢引數
@GetMapping("/user/{userId}/age")
public String getUserIdAge(
@PathVariable("userId") String useid,
@RequestParam(value="type",required = false) String type){
}
如果我們請求的url是:/user/{123456}/age?type=web
那麼我們伺服器端得到的資料就是:userid=123456;type=web
@RequestBody
用於讀取 Request 請求(可能是 POST,PUT,DELETE,GET 請求)的 body 部分並且Content-Type 為 application/json 格式的資料,接收到資料之後會自動將資料繫結到 Java 物件上去。系統會使用HttpMessageConverter或者自定義的HttpMessageConverter將請求的 body 中的 json 字串轉換為 java 物件。
讀取配置資訊
有些時候我們需要將一些常用的配置資訊放到配置檔案中,在具體使用的過程中我們需要從配置檔案中讀取這些資料。其中Spring就給我們提供了幾種不錯的讀取配置資訊的方法
例如常見的yml檔案
zhonghu:關注java冢狐。
my-profile:
name:java冢狐
age:18
user:
location:中國
books:
-name:三國演義
description:魏蜀吳
-name:西遊記
description:師徒四人
@value
使用@value("${property}")讀取比較簡單的配置資訊
@Value("${zhonghu}")
String zhonghu;
@ConfigurationProperties
通過@ConfigurationProperties讀取配置資訊並與bean繫結
@Component
@ConfigurationProperties(prefix ="user")
class User{
}
可以像使用普通的Spring Bean一樣,將其注入到類中使用。
@PropertySource
主要用於讀取指定的properties檔案
引數校驗
引數校驗在我們程式設計中的重要性不言而喻,即使在前端對資料進行校驗的情況下,我們還是要對傳入後端的資料再進行一次校驗,避免使用者饒過瀏覽器直接通過HTTP工具直接向後端請求一些違法資料。
JSR是一套JavaBean引數校驗的標準,其定義了很多常用的校驗註解。
一些常用的欄位驗證的註解
@NotEmpty
被註釋的字串的不能為 null 也不能為空@NotBlank
被註釋的字串非 null,並且必須包含一個非空白字元@Null
被註釋的元素必須為 null@NotNull
被註釋的元素必須不為 null@AssertTrue
被註釋的元素必須為 true@AssertFalse
被註釋的元素必須為 false@Pattern(regex=,flag=)
被註釋的元素必須符合指定的正則表示式@Email
被註釋的元素必須是 Email 格式。@Min(value)
被註釋的元素必須是一個數字,其值必須大於等於指定的最小值@Max(value)
被註釋的元素必須是一個數字,其值必須小於等於指定的最大值@DecimalMin(value)
被註釋的元素必須是一個數字,其值必須大於等於指定的最小值@DecimalMax(value)
被註釋的元素必須是一個數字,其值必須小於等於指定的最大值@Size(max=, min=)
被註釋的元素的大小必須在指定的範圍內@Digits (integer, fraction)
被註釋的元素必須是一個數字,其值必須在可接受的範圍內@Past
被註釋的元素必須是一個過去的日期@Future
被註釋的元素必須是一個將來的日期
JPA相關
建立表
@Entity:宣告一個類對應一個數據庫實力
@Table:設定表名
建立主鍵
@Id:宣告一個欄位為主鍵
使用@Id宣告以後,我們還可以定義主鍵的生成策略,使用@GenerateValue指定主鍵生成策略
設定欄位型別
@Column:宣告欄位
// 設定屬性userName對應的資料庫欄位名為user_name,長度為32,非空
@Column(name = "user_name",nullable = false,length=32)
private String userName;
// 設定欄位型別並且加預設值
@Column(columnDefinition = "tinyint(1) default 1")
private Boolean enabled;
指定不持久化特定欄位
@Transient:宣告不需要與資料庫對映的欄位,在儲存的時候不需要儲存進資料庫。
宣告大欄位
@Lob:宣告某個欄位為大欄位
關聯關係
- @OneToOne 宣告一對一關係
- @OneToMany 宣告一對多關係
- @ManyToOne宣告多對一關係
- @MangToMang宣告多對多關係
全域性異常處理
- @ControllerAdvice:包含@Component。可以被掃描到。統一處理異常。
- @ExceptionHandler(Exception.class):用在方法上面表示遇到這個異常就執行以下方法。
最後
- 如果覺得看完有收穫,希望能給我點個贊,這將會是我更新的最大動力,感謝各位的支援
- 歡迎各位關注我的公眾號【java冢狐】,專注於java和計算機基礎知識,保證讓你看完有所收穫,不信你打我
- 如果看完有不同的意見或者建議,歡迎多多評論一起交流。感謝各位的支援以及厚愛。
——我是冢狐,和你一樣熱愛程式設計。