|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
最后就是我对java的几点希望:首先是IDE工具,有人说java已经很好了,有jbuilder,eclipse,net网页编程Beans等等,但是我认为如果java想超越.net网页编程,那么他首先要解决的就是IDE工具的整合。
Java事务模子
在我的前两篇先容C#事务和托付的blog宣布以后,人人呼应出格强烈热闹,点击率很高,看来事务/托付机制是良多同仁对照含混的中央,借此春风,加上比来本人转战java,因而决意写这篇先容java事务机制的blog。
实在,不论哪一种言语的事务机制,毫无破例都逃不出三点:事务源/发送者,事务的承受者/处置者/侦听者,和事务源向事务承受者传送的事务信息。对应在java中,事务源(eventsource),事务聆听者(eventlistener),事务动静称为eventobject。而在C#中,分离是发送者(Sender),处置者(handler),事务动静则是事务参数(EventArgument)。而java和c#都接纳不异的呼应形式:公布者/定阅者形式(publisher/subscriber),详细来讲就是:
(1)定阅者向公布者注册本人感乐趣的事务;
(2)事务产生时,关照定阅者呼应事务。
复杂一句话,就是那句常说的:“Dontcallme,Illcallyou。”
因为之前已对C#的事务机制举行了切磋,上面,我将侧重谈谈java的事务机制,和对二者完成机制的对照:
(一)Java事务完成机制
上面是一个自界说java事务的例子,经由过程这个复杂的演示,你能够看到Java的事务完成机制。这里申明一下,这个例子引自http://www.rainsts.net/article.asp?id=224,为了申明道理,改编了原文中对匿名办法部分,并且因为这个网站的代码编纂器缺少对java代码的撑持,因而,对关头字,范例等并没有作格局显现处置。
importjava.util.*;
//界说一个相似C#EventArgs的类用来传送事务形态信息。
//一样平常请求承继自java.util.EventObject,且以Event开头。
classClicktEventextendsEventObject
{
publicDemoBeansource;
//机关函数的参数传送发生事务的事务源
publicClickEvent(DemoBeansource)
{
super(source);
this.source=source;
}
}
//经由过程接口来界说事务呼应函数原型,就像c#delegate界说了呼应函数的“模板”,
//别忘了,接话柄际上就是一种“条约”,“左券”,经由过程这个接口中的函数署名到达对呼应函数的标准
//一样平常请求承继自java.util.EventListener,且以Listener开头。
//这里以I开首界说ClickListener接口,自创自.net,不切合j2ee的定名标准
interfaceIClickListenerextendsEventListener
{
voidclick(ClicktEvente);
}
//事务侦听者,完成侦听者接口
publicclassClickListenerimplementsIClickListener
{
public voidclick(ClicktEvente) {
System.out.println("theclickedeventhappened");
}
}
//界说演示控件类,也就是事务源
classDemoBean
{
//用一个java.util.Vector对象来存储一切的事务监听器对象。
privateVectorclicks=newVector();
//增加事务定阅。一样平常以add(listener)体例拼写,并增加synchronized关头字。
publicsynchronizedvoidaddExampleListener(IClickListenerlistener)
{
clicks.add(listener);
}
//移除事务定阅。一样平常以remove(listener)体例拼写,并增加synchronized关头字。
publicsynchronizedvoidremoveExampleListener(IClickListenerlistener)
{
clicks.remove(listener);
}
//触发事务。
protectedvoiddoClickEvent()
{
//锁定,制止在触发时代有事务被定阅或移除。
synchronized(this)
{
//创立事务形态对象。
ClicktEventce=newClickEvent(this);
//轮回触发一切的事务定阅办法。
for(inti=0;i<clicks.size();i++)
{
IClickListenere=(IClickListener)clicks.get(i);
e.click(ce);
}
}
}
//摹拟点击操纵。
publicvoidClick()
{
doClickEvent();
}
}
//测试程序
publicclassProgram
{
publicstaticvoidmain(String[]args)
{
//创立控件。
DemoBeanbean=newDemoBean();
//实例化一个事务侦听者
ClickListnertestListner=newClickListner();
//增加事务定阅。
bean.addExampleListener(testListner);
//摹拟触发点击操纵。
bean.Click();
}
}
<p>
最后我再次声明,我并没有说不看好java,实际上我对java很乐观的,毕竟她正在不断改进中,我相信她总有一天会和.net网页编程并驾齐驱的 |
|