Post

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.