1. 程式人生 > 其它 >Spring常用註解一網打進

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和計算機基礎知識,保證讓你看完有所收穫,不信你打我
  • 如果看完有不同的意見或者建議,歡迎多多評論一起交流。感謝各位的支援以及厚愛。

——我是冢狐,和你一樣熱愛程式設計。

image