论坛首页 Java企业应用论坛

Aop回调 和 事件回调的区别

浏览 5669 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-06-22  
Aop回调和事件回调都允许在特定的情况下执行用户指定的代码,这种情况通常涉及状态更改或活动的开始或结束。两种方式的区别就在代码指定的这个环节上面。

无论是使用aop机制还是事件机制,要想对象在特定情况下执行指定的代码,编程人员都必须首先通知对象要执行什么代码,同时告诉对象在什么情况下执行。在代码指定这个环节上,aop是作用于定义层面的,而事件机制是作用于对象实例的。这就是说,只有对象被实例化了,我们才能对这个对象指定事件回调函数。而aop则相反,在定义对象的时候,回调函数已经被指定了。对象一旦实例化,回调函数也会被自动加载。

先看事件回调,如:
Button button=new Button();
button.addClickListener(回调函数);

上面这个事件回调可以看出,我们在button 实例化了,我们才可以指定listener。而下次我们运行Button button1=new Button(); button1并不回加载回调函数。

再看aop回调,如:
Object around():execution(* myButton.Button.click(..)){
	运行回调函数
}

上面这个aop回调可以看出,我们实际上改变了Button的定义。每次实例化Button的时候,我们指定的回调函数都会被植入到Button的实例中去。
   发表时间:2009-06-22  
我知道事件回调的话是通过事件对象来调用的回调函数,比如Button b = new Button();
b.addListener(doSomeThing());
实际上doSomeThing()是被加到了b的事件监听队列里,当事件触发以后由b调用了doSomeThing()函数。

我想问的是,AOP是通过什么样的途径实现的回调?
0 请登录后投票
   发表时间:2009-06-23  
能这样比么?
AOP是模式,回调是方法。
0 请登录后投票
   发表时间:2009-06-23  
mgoann 写道
我知道事件回调的话是通过事件对象来调用的回调函数,比如Button b = new Button();
b.addListener(doSomeThing());
实际上doSomeThing()是被加到了b的事件监听队列里,当事件触发以后由b调用了doSomeThing()函数。

我想问的是,AOP是通过什么样的途径实现的回调?


aop实现的方法很多,主要有两个途径:一个是硬编译,直接把回调函数编译进去,一个是动态代理,利用类加载器在加载的时候,动态生成新的对象。


0 请登录后投票
   发表时间:2009-06-23   最后修改:2009-06-23
weiqingfei 写道
能这样比么?
AOP是模式,回调是方法。


是没有人这样比。但是二者都有一个共同目的,就是在特定的情况下运行用户指定的代码。这样做旨在降低代码的耦合程度,提高代码的可读性和复用率。

0 请登录后投票
   发表时间:2009-06-23  
我个人认为:AOP可以帮助我们降低一点依赖。不至于太多代码之间的偶合。


Button button=new Button();
button.addClickListener(回调函数);
而这种显示的调用偶合性比较大,当然了,这种偶合限于“直接”调用。


2者做的事情一样,只是形式不一样而已。
0 请登录后投票
   发表时间:2009-07-31  
理解太过表面,
比方说你举的例子:向button上添加单击监听。
它确实是用到的回调,你也说了当事件触发时会回调某函数。
但是你应该知道当事件发生时,这个回调是如何调用的,这才是关键!
0 请登录后投票
   发表时间:2009-08-03  
aop 有一点优于事件的地方就是:

around advice 其实有选择的功能,如果运行proceed(); 被切面的函数才会执行。否则,系统将不会调用后面的advice和被切面的函数。这就可以改变原有的流程。当然你也可以用一些流控制类库来达到目的,如apache 的chain。但是他们一是使用复杂,二是代码的耦合方面也没有aop好。

而事件上的listener是没有这个功能的。事件发生时的所有被注册的回调函数都会被调用
0 请登录后投票
   发表时间:2010-02-08  
观察者实现和事件回调还有得一比
0 请登录后投票
   发表时间:2010-03-14  
AOP和事件回调的触发环境不同。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics