Java 教科書告訴我們:「所有對象使用前必須創建」。但正如 GC 讓我們無需關心銷毀,IoC (Inversion of Control) 容器如今讓我們無需關心創建。這場革命將「創建與銷毀」雙雙托管給容器,極大釋放開發生產力。
// 需手動構建整棵依賴樹
BI b = new B(new A()); // 若 B 還依賴 C/D/E,還得遞歸 new
b.invoke();
痛點:使用一個小方法,卻要研究十幾個類的構造細節、工廠模式、單例模式……
// 僅聲明需要什麼,不關心怎麼創建
BI b = (BI) WebAppUtil.getService("b");
b.invoke();
<app>
<services>
<pojoService name="b" class="test.B"/>
<pojoService name="a" class="test.A"/>
<pojoService name="c" class="test.C"/>
</services>
</app>
關鍵差異:配置中完全不聲明類之間的調用關係。容器通過 PicoContainer 風格的構造器注入自動解析依賴圖。
<bean id="b" class="test.B">
<property name="a"><ref bean="a"/></property> <!-- 必須手動繫結依賴 -->
</bean>
<bean id="a" class="test.A"/>
<bean id="c" class="test.C"/>
Spring 需在 XML 中顯式維護依賴拓撲,項目越大、Bean 越多、變更越頻繁,維護成本指數級上升。
BI),而非具體實現當項目存在:海量 Bean、複雜依賴、頻繁重構、多人並行開發 時,Jdon 風格的「無侵入式 IoC」能顯著降低配置負債與出錯率。對於已投入 Spring 體系的項目,可考慮在新模塊試點 Jdon,或遷移至 Spring 3.0+ 的 @Autowired + 組件掃描,同樣實現「零 XML 依賴聲明」。
[返回首頁]