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 知識點彙總, 待更