springboot常用註解大全(超詳細, 30個)

小程xy發表於2024-07-15

Spring Boot註解主要用於簡化配置、自動裝配元件和實現宣告式服務。以下是詳細的介紹:

1、Springboot註解

核心註解

1. @SpringBootApplication

  • 作用: 標註一個主程式類,表明這是一個Spring Boot應用程式的入口。
  • 功能: 這是一個複合註解,組合了@Configuration@EnableAutoConfiguration@ComponentScan
    • @Configuration: 標識一個類作為配置類,類似於Spring XML配置檔案。
    • @EnableAutoConfiguration: 啟用Spring Boot的自動配置機制,根據專案中的依賴和應用上下文自動配置Spring應用程式。
    • @ComponentScan: 自動掃描指定包及其子包中的Spring元件。
  • 示例:
    @SpringBootApplication
    public class MyApplication {
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    }
    

自動配置註解

2. @EnableAutoConfiguration

  • 作用: 啟用Spring Boot的自動配置機制,根據專案中的依賴和應用上下文自動配置Spring應用程式。
  • 細節: 它會嘗試根據新增的依賴和專案中的配置自動配置Spring Bean。例如,如果專案中有HSQLDB的依賴,Spring Boot會自動配置一個記憶體資料庫。
  • 示例:
    @EnableAutoConfiguration
    public class MyApplication {
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    }
    

3. @Configuration

  • 作用: 標註一個類作為配置類,相當於一個Spring XML配置檔案。
  • 細節: 配置類可以包含一個或多個@Bean註解的方法,這些方法會返回要註冊到Spring應用上下文中的Bean。
  • 示例:
    @Configuration
    public class AppConfig {
        @Bean
        public MyService myService() {
            return new MyServiceImpl();
        }
    }
    

元件掃描和注入註解

4. @ComponentScan

  • 作用: 指定要掃描的包,以便發現和註冊Spring元件。
  • 細節: 預設情況下,@ComponentScan會掃描主應用類所在的包及其子包。
  • 示例:
    @ComponentScan(basePackages = "com.example")
    public class MyApplication {
    }
    

5. @Component

  • 作用: 將一個類標識為Spring元件(Bean),可以被Spring容器自動檢測和註冊。
  • 細節: @Component是一個通用的註解,可以用來標註任何Spring管理的Bean。
  • 示例:
    @Component
    public class MyComponent {
    }
    

6. @Service

  • 作用: 標識服務層元件,實際上是@Component的一個特化,用於表示業務邏輯服務。
  • 細節: 用於標識服務層的類,這些類通常包含業務邏輯。
  • 示例:
    @Service
    public class MyService {
    }
    

7. @Repository

  • 作用: 標識持久層元件,實際上是@Component的一個特化,用於表示資料訪問元件

資料訪問元件(Data Access Component)通常是指在軟體系統中負責資料訪問和持久化的部分或模組。在典型的企業應用程式中,資料訪問元件通常涉及與資料庫互動、執行資料操作(如增刪改查)、資料轉換和持久化等任務。

  • 示例:
    @Repository
    public class MyRepository {
    }
    

8. @Controller

  • 作用: 標識控制層元件,實際上是@Component的一個特化,用於表示Web控制器。
  • 細節: 用於標識Spring MVC控制器,處理Web請求並返回檢視。
  • 示例:
    @Controller
    public class MyController {
    }
    

9. @RestController

  • 作用: 標識一個RESTful Web服務的控制器,實際上是@Controller@ResponseBody的結合。
  • 細節: 返回的物件會自動序列化為JSON或XML,並寫入HTTP響應體中。
  • 示例:
    @RestController
    public class MyRestController {
    }
    

資料繫結和驗證註解

10. @RequestMapping

  • 作用: 對映HTTP請求到處理方法上(GET、POST、PUT、DELETE等)。
  • 示例:
    @Controller
    public class MyController {
        @RequestMapping("/hello")
        public String sayHello() {
            return "hello";
        }
    }
    

11. @GetMapping

  • 作用: 對映HTTP GET請求到處理方法上。
  • 示例:
    @RestController
    public class MyRestController {
        @GetMapping("/users")
        public List<User> getUsers() {
            return userService.getAllUsers();
        }
    }
    

12. @PostMapping

  • 作用: 對映HTTP POST請求到處理方法上。
  • 示例:
    @RestController
    public class MyRestController {
        @PostMapping("/users")
        public User
    

13. @ResponseBody

  • 作用: 將方法的返回值轉換為指定格式(如JSON、XML)作為HTTP響應的內容返回給客戶端。
  • 細節: 常用於RESTful服務中,標識方法返回的物件不是檢視名稱,而是直接寫入HTTP響應體中的資料。
  • 示例:
    @RestController
    public class MyRestController {
        @GetMapping("/hello")
        @ResponseBody
        public String sayHello() {
            return "Hello, World!";
        }
    }
    

14. @RequestBody

  • 作用: 將HTTP請求體的內容(如JSON、XML等)對映到一個Java物件。
  • 細節: 通常用於POST請求中,將客戶端傳送的資料繫結到方法的引數上。
  • 示例:
    @RestController
    public class MyRestController {
        @PostMapping("/users")
        public ResponseEntity<String> addUser(@RequestBody User user) {
            // 處理使用者新增邏輯
            return ResponseEntity.ok("User added successfully");
        }
    }
    

15. @PathVariable

  • 作用: 從URI路徑中提取引數值,將其對映到方法的引數上。
  • 細節: 常用於RESTful服務中,允許動態地將URL中的部分作為方法引數使用。
  • 示例:
    @RestController
    public class MyRestController {
        @GetMapping("/users/{userId}")
        public ResponseEntity<User> getUserById(@PathVariable Long userId) {
            // 根據userId查詢使用者資訊
            User user = userService.getUserById(userId);
            return ResponseEntity.ok(user);
        }
    }
    

16. @RequestParam

  • 作用: 用於從請求中獲取引數的值。
  • 細節: 可以指定引數的預設值,是否必需等屬性。適用於處理查詢引數或表單資料。
  • 示例:
    @RestController
    public class MyRestController {
        @GetMapping("/users")
        public ResponseEntity<User> getUserByName(@RequestParam String username) {
            // 根據使用者名稱查詢使用者資訊
            User user = userService.getUserByUsername(username);
            return ResponseEntity.ok(user);
        }
    }
    

這些註解是Spring MVC和Spring Boot中常用的資料繫結和處理註解,幫助開發者更方便地處理HTTP請求和響應,實現靈活的介面設計和資料互動。

資料訪問註解

17. @Entity

  • 作用: 標識一個JPA實體。
  • 細節: 用於定義一個與資料庫表對映的持久化類。
  • 示例:
    @Entity
    public class User {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        private String name;
    }
    

18. @Table

  • 作用: 指定實體對應的資料庫表名稱。
  • 細節: 如果類名與資料庫表名不同,可以使用@Table註解進行指定。
  • 示例:
    @Entity
    @Table(name = "users")
    public class User {
        // fields and methods
    }
    

其他常用註解

19. @Value

  • 作用: 用於將外部屬性值注入到Spring Bean中。
  • 細節: 可以用於注入屬性檔案中的值、系統環境變數、系統屬性等。
  • 示例:
    @Value("${my.property}")
    private String myProperty;
    

20. @Autowired

  • 作用: 自動裝配Bean,進行依賴注入。
  • 細節: Spring會自動滿足Bean的依賴。可以用於欄位、建構函式和方法上。
  • 示例:
    @Service
    public class MyService {
        @Autowired
        private MyRepository myRepository;
    }
    

21. @Bean

  • 作用: 用於定義一個Spring Bean。
  • 細節: 通常用於配置類中,定義的方法返回的物件會被註冊為Spring容器中的Bean。
  • 示例:
    @Configuration
    public class AppConfig {
        @Bean
        public MyService myService() {
            return new MyServiceImpl();
        }
    }
    

22. @Conditional

  • 作用: 根據特定條件建立Bean。
  • 細節: 可以與自定義條件類一起使用,只有在條件滿足時,Spring才會建立該Bean。
  • 示例:
    @Bean
    @Conditional(MyCondition.class)
    public MyService myService() {
        return new MyServiceImpl();
    }
    

23. @Primary

  • 作用: 指定當一個介面有多個實現時,優先選擇的Bean。
  • 示例:
    @Service
    @Primary
    public class PrimaryService implements MyService {
    }
    

24. @Qualifier

  • 作用: 配合@Autowired使用,用於指定注入的Bean的名稱或ID。
  • 示例:
    @Service
    public class MyService {
        @Autowired
        @Qualifier("myRepositoryImpl")
        private MyRepository myRepository;
    }
    

25. @Lazy

  • 作用: 延遲初始化Bean,只有在首次使用時才建立Bean。
  • 示例:
    @Service
    @Lazy
    public class LazyService {
    }
    

26. @Scope

  • 作用: 指定Bean的作用域(單例、多例、請求、會話等)。
  • 示例:
    @Service
    @Scope("prototype")
    public class PrototypeService {
    }
    

其他註解

簡化POJO開發的註解

這三個註解通常與Lombok(一種Java庫)結合使用,用於簡化POJO(Plain Old Java Object)的開發。

1. @Data

  • 作用: @Data 是一個複合註解,整合了 @ToString@EqualsAndHashCode@Getter@Setter@RequiredArgsConstructor 的功能。

  • 功能:

    • @ToString: 自動生成 toString() 方法,包含所有欄位。
    • @EqualsAndHashCode: 自動生成 equals()hashCode() 方法,基於所有非靜態和非瞬態欄位。
    • @Getter@Setter: 自動生成欄位的 getter 和 setter 方法。
    • @RequiredArgsConstructor: 自動生成包含必需欄位的構造方法。
  • 示例:

    import lombok.Data;
    
    @Data
    public class User {
        private Long id;
        private String username;
        private String email;
    }
    

    編譯時,Lombok會自動生成如下程式碼:

    public class User {
        private Long id;
        private String username;
        private String email;
    
        // 自動生成的 toString(), equals(), hashCode(), getter 和 setter 方法
        // 以及包含所有欄位的構造方法
    }
    

2. @AllArgsConstructor

  • 作用: 自動生成包含所有欄位的構造方法。

  • 示例:

    import lombok.AllArgsConstructor;
    import lombok.Data;
    
    @Data
    @AllArgsConstructor
    public class User {
        private Long id;
        private String username;
        private String email;
    }
    

    編譯時,Lombok會自動生成如下構造方法:

    public User(Long id, String username, String email) {
        this.id = id;
        this.username = username;
        this.email = email;
    }
    

3. @NoArgsConstructor

  • 作用: 自動生成無參構造方法。

  • 示例:

    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @NoArgsConstructor
    public class User {
        private Long id;
        private String username;
        private String email;
    }
    

    編譯時,Lombok會自動生成如下無參構造方法:

    public User() {
        // 空構造方法
    }
    

文章到這裡就這束了!~

其他文章地址:

快速入門,springboot知識點彙總

springboot常用註解大全(超詳細, 30個)

springboot websocket知識點彙總

spring cloud 知識點彙總, 待更

相關文章