在 Spring Boot 的世界裡,您會經常看到許多以 @
符號開頭的 Annotation (註解)。這些 Annotation 就像是「小貼紙」一樣,標示在程式碼上,幫助 Spring Boot 框架快速了解該怎麼處理程式。
想像一下,您正在整理書櫃:
這些標籤本身不是書的內容,但它們提供了關於書本的 資訊 (Information),幫助您快速分類。
在 Java 和 Spring Boot 中,Annotation 也是一種「標籤」:
在 Spring Boot 出現之前,開發者要透過大量 XML 設定檔 來告訴 Spring:
這種方式繁瑣又容易出錯。
Spring Boot 的核心理念是 約定優於設定 (Convention over Configuration),而 Annotation 正是落實這個理念的工具。
使用 Annotation 的好處:
@RestController
就知道它是 API 控制器。以下是常見的 Spring Boot Annotation,大致可以分成幾類:
核心元件與組態 (Core Components & Configuration)
@Configuration
:宣告此類別為一個設定檔,裡面可以包含多個 @Bean 定義。@Bean
:標註於方法上,使其回傳的物件交給 Spring 容器管理。@Component
:最基礎的元件標註,表示這個類別要被 Spring 掃描並註冊為 Bean。@Service
:用於標註商業邏輯層的元件。@Repository
:用於標註資料存取層的元件 (通常操作資料庫),具備將底層資料庫錯誤轉譯為 Spring 標準異常的功能。@Controller
:用於傳統 MVC 架構的 Web 控制器 (Controller),通常會回傳一個視圖 (View) 名稱。@RestController
:用於 RESTful API 的控制器 (Controller),是 @Controller
和 @ResponseBody
的結合,其方法的回傳值會直接轉換為 JSON 或純文字。依賴注入 (Dependency Injection)
@Autowired
:Spring 會自動尋找符合類型的 Bean 並注入。@Qualifier("beanName")
:當有多個同類型的 Bean 時,透過名稱指定要注入哪一個。@Value("${property.name}")
:從 application.properties
或 application.yml
檔案中注入設定值。@Lazy
:延遲初始化 Bean,直到第一次使用時才建立Web API 與路由 (Web & Routing)
@GetMapping("/path")
:處理 HTTP GET 請求。@PostMapping("/path")
:處理 HTTP POST 請求。@PutMapping("/path")
:處理 HTTP PUT 請求 (通常用於更新)。@DeleteMapping("/path")
:處理 HTTP DELETE 請求 (通常用於刪除)。@RequestParam
:取得 URL 中的查詢參數 (如: /api/users?name=John
)@PathVariable
:取得 URL 路徑中的變數 (如: /api/users/123
)@RequestBody
:取得請求主體 (Request Body) 中的資料 (通常是 JSON 格式)。交易管理 (Transaction Management)
@Transactional
:讓方法 (Method) 或整個類別的公開方法具備交易性。當方法 (Method) 執行成功時,交易會被提交 (Commit);若中途發生錯誤,則會全部回滾 (Rollback)。以下是一個最簡單的 Spring Boot API 範例:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController // 告訴 Spring 這是一個 REST API 控制器
public class HelloController {
@GetMapping("/hello") // 對應 HTTP GET 請求 /hello
public String sayHello() {
return "Hello, Spring Boot!";
}
}
🔎 說明:
@RestController
:告訴 Spring 這是一個 API 控制器 (Controller),其方法 (Method) 回傳的結果會自動轉換為 JSON 或純文字。@GetMapping("/hello")
:將 sayHello()
方法與 HTTP GET /hello
這個路徑綁定。Spring Boot 處理 Annotation 的簡化流程:
程式碼上標註 Annotation
↓
Spring Boot 啟動時掃描所有類別
↓
找到 Annotation 並建立對應的 Bean
↓
完成依賴注入與自動配置
↓
應用程式開始運作