打破Java定律:无需创建对象--Ioc容器革命

狮子消费者

狮子消费者

2016-02-19 12:17

get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是打破Java定律:无需创建对象--Ioc容器革命,一起来学习了解下吧!
我们知道,在Java基本教程中有一个定律告诉我们:所有的对象都必须创建;或者说:使用对象之前必须创建,但是现在我们可以不必一定遵循这个定律了,我们可以从Ioc容器中直接获得一个对象然后直接使用,无需事先创建它们。这种变革,就如同我们无需考虑对象销毁一样;因为Java的垃圾回收机制帮助我们实现了对象销毁;现在又无需考虑对象创建,对象的创建和销毁都无需考虑了,这给编程带来的影响是巨大的。

我们从一个简单例子开始,有一个普通类B代码如下:
public class B implements BI{
AInfterface a;

public B(AInfterface a){

this.a = a

}

public void invoke(){

/** ...*/

}

}

有两种使用B的方式:

普通无Ioc容器的调用方式:
BI b = new B(new A());//需要在生成B实例之前 生成A等实例
b. invoke();

使用Ioc容器(Jdon框架)的革命调用方式:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)BI b = (BI) WebAppUtil.getService(“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容器配置jdonframework.xml如下:
app
services
pojoService name="b" class="test.B"/
pojoService name="a" class="test.A"/
pojoService name="c" class="test.C"/

/services
/app

注意:虽然B类代码调用了A类(甚至可能调用C等其他类),但是在配置中我们无需考虑这种调用关系。因此,整个环节我们都无需考虑B类中涉及其他类的调用关系;这样是非常省时省力的;特别是如果项目较大,JavaBeans特别多,又是多人协调开发,这种方式对提高开发效率;降低出错率是非常大的帮助。

如果你的项目中有非常多的类;调用关系很复杂,而且调用关系随时都可能变化,那么,使用无需照顾调用关系的Ioc容器无疑是减轻开发负担的首选。

ioc容器另外一个著名实现是Spring框架,但是在Spring的配置文件applicationContext.xml中,我们必须考虑上述调用关系:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)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"

所以,从以上对比来看,从项目开发效率角度看,基于PiocContainer实现的Jdon框架在实际使用配置效率无疑要高于Spring框架。

同时,也可以说:基于PiocContainer实现的Jdon框架完全真正实现了Ioc容器的革命性优点:颠覆了“使用对象之前必须创建” 的基本Java语言定律。

邹妙君 [返回首页]

展开更多 50%)
分享

猜你喜欢

打破Java定律:无需创建对象--Ioc容器革命

编程语言 网络编程
打破Java定律:无需创建对象--Ioc容器革命

Java容器类的深入理解

编程语言 网络编程
Java容器类的深入理解

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

创建高级对象

编程语言 网络编程
创建高级对象

java获取web容器地址的方法

编程语言 网络编程
java获取web容器地址的方法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

创建自己的对象

编程语言 网络编程
创建自己的对象

JavaScript创建高级对象

Web开发
JavaScript创建高级对象

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点

html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点

C++箴言:只要可能就用const

C++箴言:只要可能就用const
下拉加载更多内容 ↓