Spring Annotation

@Transactional

  • 屬性 (Properties)

rollbackFor: 指定觸發回滾的異常類型。預設僅在 RuntimeException 時回滾。建議加入 rollbackFor = Exception.class 以涵蓋 Checked Exception。

驗證註解 (Validation)

  • @NotNull: 用於基本型別。
  • @NotEmpty: 用於集合 (Collection) 或陣列。
  • @NotBlank: 用於字串(檢查長度且排除空格)。
  • @Min / @Max: 數值限制。
  • @Email: 郵件格式。
  • @Past / @Future: 日期時間限制。

JPA

@Modifying

用於增強 @Query,使其支援 INSERT, UPDATE, DELETEDDL

@Lock

  • LockModeType.PESSIMISTIC_WRITE: 悲觀寫鎖。

抓取策略 (Fetch)

關聯類型註解預設 FetchType推薦做法
多對一@ManyToOneEAGER建議改為 LAZY 並配合 Join Fetch
一對一@OneToOneEAGER視使用頻率而定,傾向 LAZY
一對多@OneToManyLAZY維持 LAZY,配合 EntityGraph
多對多@ManyToManyLAZY維持 LAZY

術語表 (Glossary)


核心框架 (Framework)

依賴注入 (Dependency Injection)

  • @Autowired: 依類型自動裝配 (Spring 專有)。
  • @Resource: 依名稱自動裝配 (Java 標準)。
  • @Qualifier: 指定具體 Bean ID。
  • @Value: 注入外部化配置屬性。

@Resource vs @Autowired

註解來源裝配規則建議
@ResourceJSR-250 (標準)優先依 名稱 (Name) 裝配。若需跨框架移植時使用。
@AutowiredSpring 專有優先依 類型 (Type) 裝配。Spring 專案推薦,功能更豐富。

作用域 (Bean Scope)

  • singleton: 全域單例 (預設)。
  • prototype: 每次請求建立新實例。
  • request: 單次 HTTP 請求。
  • session: HTTP 會話。

切面導向 (AOP)

名稱描述
Advice (通知)攔截後執行的代碼 (如日誌、事務)。
Pointcut (切入點)定義攔截哪些連結點 (Joint Point)。
Aspect (切面)Pointcut + Advice 的組合。
Weaving (編織)將切面套用到目標物件以產生代理物件的過程。

通知類型

  • @Before: 目標方法執行前。
  • @After: 目標方法執行後。
  • @AfterReturning: 正常回傳後。
  • @AfterThrowing: 拋出異常後。
  • @Around: 環繞通知,可自控執行時機。

JSON 處理 (Jackson)

  • @JsonProperty: 設定屬性名稱。
  • @JsonFormat: 格式化日期。
  • @JsonIgnore: 忽略該屬性。
  • @JsonInclude: 依條件包含屬性 (如 NON_NULL)。
  • @JsonIgnoreProperties: 批次忽略屬性或忽略未知欄位。

測試 (Testing)

  • @SpringBootTest: 載入完整上下文。
  • @DataJpaTest: 僅載入 JPA 相關元件與 H2 記憶體資料庫。
  • @WebMvcTest: 僅載入 Web 層元件 (如 Controller)。
  • @MockBean: 建立 Mock 物件。
  • @Commit: 測試後提交事務(預設為自動回滾)。

重試機制 (Retry)

  • @EnableRetry: 開啟重試功能。
  • @Retryable: 標註需要重試的方法。
  • @Recover: 當重試達上限後的兜底方法。