在 Spring 和 Spring Boot 框架中,有許多核心注解被廣泛應用。以下是常用的關鍵注解分類詳解:
一、組件聲明與依賴注入
注解 | 作用 | 示例 |
---|
@Component | 通用組件聲明 (Bean 的泛化形式) | @Component public class ServiceImpl {...} |
@Service | 標記服務層(業務邏輯層)組件 | @Service public class UserService {...} |
@Repository | 標記持久層(DAO 層)組件,自動處理數據庫異常 | @Repository public class UserDao {...} |
@Controller | 標記 Web 控制器組件 | @Controller public class UserCtrl {...} |
@RestController | @Controller + @ResponseBody (REST API 專用) | @RestController public class ApiCtrl {...} |
@Autowired | 自動按類型依賴注入 | @Autowired private UserService service; |
@Qualifier | 按名稱指定注入的 Bean | @Qualifier("mainDB") DataSource ds; |
@Resource | JSR-250 標準注入(按名稱) | @Resource(name="slaveDB") DataSource ds; |
二、配置與屬性管理
注解 | 作用 |
---|
@Configuration | 聲明配置類(替代 XML 配置) |
@Bean | 聲明方法返回對象作為 Spring Bean |
@Value | 注入外部配置值(${property.key} ) |
@ConfigurationProperties | 批量綁定配置文件到 POJO(比 @Value 更結構化) |
@PropertySource | 加載自定義 properties 文件 |
@EnableConfigurationProperties | 啟用配置屬性綁定 |
三、Web 與請求處理
注解 | HTTP 方法 | 作用 |
---|
@RequestMapping | 通用映射 | 類/方法級別的請求映射 |
@GetMapping | GET | 簡化版 GET 請求映射 |
@PostMapping | POST | 簡化版 POST 請求映射 |
@PutMapping | PUT | 簡化版 PUT 請求映射 |
@DeleteMapping | DELETE | 簡化版 DELETE 請求映射 |
@PatchMapping | PATCH | 簡化版 PATCH 請求映射 |
@RequestParam | - | 獲取 URL 查詢參數 |
@PathVariable | - | 獲取 URL 路徑變量 |
@RequestBody | - | 接收 HTTP 請求體(如 JSON) |
@ResponseBody | - | 直接返回數據(非視圖) |
@CookieValue | - | 獲取 Cookie 值 |
@SessionAttribute | - | 訪問會話屬性 |
四、事務管理
注解 | 作用 |
---|
@Transactional | 聲明式事務管理(類/方法級) |
@EnableTransactionManagement | 在配置類啟用注解驅動的事務管理 |
五、測試相關
注解 | 作用 |
---|
@SpringBootTest | 啟動完整的 Spring Boot 測試環境 |
@WebMvcTest | 專注于 MVC 控制器的測試(不加載完整上下文) |
@DataJpaTest | 專注于 JPA 測試(使用內存數據庫) |
@MockBean | 在測試上下文中注入 Mock 對象 |
@Test | 標記測試方法(JUnit) |
六、AOP 面向切面編程
注解 | 作用 |
---|
@Aspect | 聲明切面類 |
@Before | 方法執行前切入 |
@After | 方法執行后切入(無論是否異常) |
@AfterReturning | 方法正常返回后切入 |
@AfterThrowing | 方法拋出異常后切入 |
@Around | 環繞增強(最強大的通知類型) |
@Pointcut | 定義可重用的切入點表達式 |
七、條件化配置 (Spring Boot)
注解 | 作用 |
---|
@ConditionalOnProperty | 當配置屬性存在且匹配時生效 |
@ConditionalOnBean | 當指定 Bean 存在時生效 |
@ConditionalOnMissingBean | 當指定 Bean 不存在時生效 |
@ConditionalOnClass | 當指定類在 classpath 存在時生效 |
@ConditionalOnWebApplication | 當是 Web 應用時生效 |
八、調度與異步
注解 | 作用 |
---|
@Scheduled | 定時任務調度(支持 cron 表達式) |
@EnableScheduling | 啟用定時任務支持 |
@Async | 異步執行方法 |
@EnableAsync | 啟用異步執行支持 |
九、緩存管理
注解 | 作用 |
---|
@Cacheable | 緩存方法結果 |
@CachePut | 更新緩存 |
@CacheEvict | 清除緩存 |
@EnableCaching | 啟用緩存注解支持 |
十、其他實用注解
注解 | 作用 |
---|
@Lazy | 延遲初始化 Bean |
@Primary | 指定同類型 Bean 的優先注入選項 |
@Scope | 定義 Bean 作用域(singleton, prototype 等) |
@Profile | 按環境激活配置(dev, test, prod) |
@Valid | 觸發 JSR-303 Bean 校驗(配合 @NotNull 等) |
📌 最佳實踐建議:
- 優先使用
@ConfigurationProperties
替代分散的 @Value
- REST API 開發首選
@RestController
+ HTTP 方法注解 - 數據庫操作使用
@Transactional
確保事務完整性 - 生產環境配置
@Profile("prod")
分離環境參數
這些注解共同構成了 Spring 生態的基石,通過聲明式編程極大簡化了企業級應用開發。掌握它們是高效使用 Spring 框架的關鍵。