Dependency Injection in Legacy Java Web Without Framework
DI 是好方向, 但在舊式 Java Web 專案裡,如果沒有 Spring、CDI、EJB 這類容器,其實沒有自然的 DI 機制。硬改成 constructor injection,會變成:
1
2
3
4
5
6
7
ProjFormService service = new ProjFormService(
new ValidateService(),
new ContractDao(),
new CommonContractService(),
new AaFormDao(),
new FormDeadlineEvaluator()
);
如果相依再往下長,Servlet 或 controller 反而要負責組一整串 service / dao。沒有容器幫忙管理生命週期、scope、transaction,這種手動 DI 很容易只是把 new 從 service 裡搬到別的地方,沒有真的讓系統變簡單。
所以舊系統維持目前寫法,測試需要隔離時再用 Mockito 處理。等日後真的升 Spring,或改成有 Jakarta EE / CDI 容器管理的架構,再來做。
參考:
This post is licensed under CC BY 4.0 by the author.