Spring Boot註解主要用於簡化配置、自動裝配組件和實現聲明式服務。以下是詳細的介紹: 1、Springboot註解 核心註解 1. @SpringBootApplication 作用: 標註一個主程式類,表明這是一個Spring Boot應用程式的入口。 功能: 這是一個複合註解,組合了@C ...
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() { // 空構造方法 }
文章到這裡就這束了!~
其他文章地址: