浏览 5724 次
锁定老帖子 主题:Aop回调 和 事件回调的区别
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-22
无论是使用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的实例中去。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-06-22
我知道事件回调的话是通过事件对象来调用的回调函数,比如Button b = new Button();
b.addListener(doSomeThing()); 实际上doSomeThing()是被加到了b的事件监听队列里,当事件触发以后由b调用了doSomeThing()函数。 我想问的是,AOP是通过什么样的途径实现的回调? |
|
返回顶楼 | |
发表时间:2009-06-23
能这样比么?
AOP是模式,回调是方法。 |
|
返回顶楼 | |
发表时间:2009-06-23
mgoann 写道 我知道事件回调的话是通过事件对象来调用的回调函数,比如Button b = new Button();
b.addListener(doSomeThing()); 实际上doSomeThing()是被加到了b的事件监听队列里,当事件触发以后由b调用了doSomeThing()函数。 我想问的是,AOP是通过什么样的途径实现的回调? aop实现的方法很多,主要有两个途径:一个是硬编译,直接把回调函数编译进去,一个是动态代理,利用类加载器在加载的时候,动态生成新的对象。 |
|
返回顶楼 | |
发表时间:2009-06-23
最后修改:2009-06-23
weiqingfei 写道 能这样比么?
AOP是模式,回调是方法。 是没有人这样比。但是二者都有一个共同目的,就是在特定的情况下运行用户指定的代码。这样做旨在降低代码的耦合程度,提高代码的可读性和复用率。 |
|
返回顶楼 | |
发表时间:2009-06-23
我个人认为:AOP可以帮助我们降低一点依赖。不至于太多代码之间的偶合。
Button button=new Button(); button.addClickListener(回调函数); 而这种显示的调用偶合性比较大,当然了,这种偶合限于“直接”调用。 2者做的事情一样,只是形式不一样而已。 |
|
返回顶楼 | |
发表时间:2009-07-31
理解太过表面,
比方说你举的例子:向button上添加单击监听。 它确实是用到的回调,你也说了当事件触发时会回调某函数。 但是你应该知道当事件发生时,这个回调是如何调用的,这才是关键! |
|
返回顶楼 | |
发表时间:2009-08-03
aop 有一点优于事件的地方就是:
around advice 其实有选择的功能,如果运行proceed(); 被切面的函数才会执行。否则,系统将不会调用后面的advice和被切面的函数。这就可以改变原有的流程。当然你也可以用一些流控制类库来达到目的,如apache 的chain。但是他们一是使用复杂,二是代码的耦合方面也没有aop好。 而事件上的listener是没有这个功能的。事件发生时的所有被注册的回调函数都会被调用 |
|
返回顶楼 | |
发表时间:2010-02-08
观察者实现和事件回调还有得一比
|
|
返回顶楼 | |
发表时间:2010-03-14
AOP和事件回调的触发环境不同。
|
|
返回顶楼 | |