我們知道在Java基本教程中有一個定律告訴我們所有的對象都必須創建或者說使用對象之前必須創建但是現在我們可以不必一定遵循這個定律了我們可以從Ioc容器中直接獲得一個對象然後直接使用無需事先創建它們
這種變革就如同我們無需考慮對象銷毀一樣因為Java的垃圾回收機制幫助我們實現了對象銷毀現在又無需考慮對象創建對象的創建和銷毀都無需考慮了這給編程帶來的影響是巨大的
我們從一個簡單例子開始有一個普通類B代碼如下
public class B implements BI{
AInfterface a;
public B(AInfterface a){
thisa = a
}
public void invoke(){
/** */
}
}
有兩種使用B的方式
普通無Ioc容器的調用方式:
BI b = new B(new A());//需要在生成B實例之前 生成A等實例
b invoke();
使用Ioc容器(Jdon框架)的革命調用方式
BI b = (BI) WebAppUtilgetService(b);
b invoke();
上面兩種方式重要區別
前者需要照顧B類中A類的實例化如果B類中調用不只A類一個還有更多其他類如C/D/E等類這樣你在使用B類時還需要研究其他類的創建如果C/D/E這些類不是你自己編寫你還需要翻閱它們的API說明研究它們應該如何創建?是使用New 還是工廠模式 還是單態調用?
這時你會感歎哇有沒有搞錯?我只不過是為了使用B類中一個小小的方法就花去我這麼多時間和精力?
當我們使用第二種方式時就無需花很多精力和時間考慮A/C/D/E等類的創建
使用Ioc容器你再也不必做這些僵化愚蠢的工作了我們只需從ioc容器中抓取一個類然後直接使用它們
當然在使用之前我們需要做一個簡單的配置把你將來需要使用的類全部告訴ioc容器例如Jdon框架的ioc容器配置jdonframeworkxml如下:
<app>
<services>
<pojoService name=b class=testB/>
<pojoService name=a class=testA/>
<pojoService name=c class=testC/>
</services>
</app>
注意雖然B類代碼調用了A類(甚至可能調用C等其他類)但是在配置中我們無需考慮這種調用關系因此整個環節我們都無需考慮B類中涉及其他類的調用關系這樣是非常省時省力的特別是如果項目較大JavaBeans特別多又是多人協調開發這種方式對提高開發效率降低出錯率是非常大的幫助
如果你的項目中有非常多的類調用關系很復雜而且調用關系隨時都可能變化那麼使用無需照顧調用關系的Ioc容器無疑是減輕開發負擔的首選
ioc容器另外一個著名實現是Spring框架但是在Spring的配置文件applicationContextxml中我們必須考慮上述調用關系
<bean id=b class=testB>
<property name=a><ref bean=a/></property><! 必須指定調用關系 >
</bean>
<bean id=a class=testA>
<bean id=c class=testC>
所以從以上對比來看從項目開發效率角度看基於PiocContainer實現的Jdon框架在實際使用配置效率無疑要高於Spring框架
同時也可以說基於PiocContainer實現的Jdon框架完全真正實現了Ioc容器的革命性優點顛覆了使用對象之前必須創建 的基本Java語言定律
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26863.html