Spring Annotation
@Transactional
- 屬性 (Properties)
rollbackFor: 指定觸發回滾的異常類型。預設僅在RuntimeException時回滾。建議加入rollbackFor = Exception.class以涵蓋 Checked Exception。
- 傳播行為 (Propagation)
- Spring Core Concepts - Transaction 詳細說明
驗證註解 (Validation)
@NotNull: 用於基本型別。@NotEmpty: 用於集合 (Collection) 或陣列。@NotBlank: 用於字串(檢查長度且排除空格)。@Min/@Max: 數值限制。@Email: 郵件格式。@Past/@Future: 日期時間限制。
JPA
@Modifying
用於增強
@Query,使其支援INSERT,UPDATE,DELETE與DDL。
@Lock
LockModeType.PESSIMISTIC_WRITE: 悲觀寫鎖。
抓取策略 (Fetch)
| 關聯類型 | 註解 | 預設 FetchType | 推薦做法 |
|---|---|---|---|
| 多對一 | @ManyToOne | EAGER | 建議改為 LAZY 並配合 Join Fetch |
| 一對一 | @OneToOne | EAGER | 視使用頻率而定,傾向 LAZY |
| 一對多 | @OneToMany | LAZY | 維持 LAZY,配合 EntityGraph |
| 多對多 | @ManyToMany | LAZY | 維持 LAZY |
術語表 (Glossary)
核心框架 (Framework)
依賴注入 (Dependency Injection)
@Autowired: 依類型自動裝配 (Spring 專有)。@Resource: 依名稱自動裝配 (Java 標準)。@Qualifier: 指定具體 Bean ID。@Value: 注入外部化配置屬性。
@Resource vs @Autowired
| 註解 | 來源 | 裝配規則 | 建議 |
|---|---|---|---|
@Resource | JSR-250 (標準) | 優先依 名稱 (Name) 裝配。 | 若需跨框架移植時使用。 |
@Autowired | Spring 專有 | 優先依 類型 (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: 當重試達上限後的兜底方法。