`
gty509
  • 浏览: 54690 次
  • 性别: Icon_minigender_1
  • 来自: Bangkok
文章分类
社区版块
存档分类
最新评论

Aop回调 和 事件回调的区别

阅读更多
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的实例中去。
分享到:
评论
9 楼 mercyblitz 2010-03-14  
AOP和事件回调的触发环境不同。
8 楼 xuyan2680 2010-02-08  
观察者实现和事件回调还有得一比
7 楼 gty509 2009-08-03  
aop 有一点优于事件的地方就是:

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

而事件上的listener是没有这个功能的。事件发生时的所有被注册的回调函数都会被调用
6 楼 ivyloo 2009-07-31  
理解太过表面,
比方说你举的例子:向button上添加单击监听。
它确实是用到的回调,你也说了当事件触发时会回调某函数。
但是你应该知道当事件发生时,这个回调是如何调用的,这才是关键!
5 楼 treblesoftware 2009-06-23  
我个人认为:AOP可以帮助我们降低一点依赖。不至于太多代码之间的偶合。


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


2者做的事情一样,只是形式不一样而已。
4 楼 gty509 2009-06-23  
weiqingfei 写道
能这样比么?
AOP是模式,回调是方法。


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

3 楼 gty509 2009-06-23  
mgoann 写道
我知道事件回调的话是通过事件对象来调用的回调函数,比如Button b = new Button();
b.addListener(doSomeThing());
实际上doSomeThing()是被加到了b的事件监听队列里,当事件触发以后由b调用了doSomeThing()函数。

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


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


2 楼 weiqingfei 2009-06-23  
能这样比么?
AOP是模式,回调是方法。
1 楼 mgoann 2009-06-22  
我知道事件回调的话是通过事件对象来调用的回调函数,比如Button b = new Button();
b.addListener(doSomeThing());
实际上doSomeThing()是被加到了b的事件监听队列里,当事件触发以后由b调用了doSomeThing()函数。

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

相关推荐

    javascript AOP 实现ajax回调函数使用比较方便

    javascript AOP 实现ajax回调函数使用比较方便,需要的朋友可以参考下。

    类似spring Aop的Proxy封装

    有一天在用回调模版的时候,忽然间又想到jdk自带的Proxy类似乎不是怎么好用,为何不把其做成回调模版呢,可以将其改造称类似spring Aop 代码如下: package com.fjx.proxy.up.test; import ...

    java 实现AOP

    一般来说要截获一个方法,我们可以采用回调方法或者动态代理。动态代理一般要更加灵活一些,目前多数的AOP Framework也大都采用了动态代理来实现。这里我们也采用动态代理作为例子。  JDK1.2以后提供了动态代理的...

    Spring AOP访问目标方法的参数操作示例

    主要介绍了Spring AOP访问目标方法的参数操作,结合实例形式详细分析了spring面向切面AOP访问目标方法的参数相关实现步骤与操作注意事项,需要的朋友可以参考下

    Spring AOP与动态代理

    Spring AOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改字节码,而是在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。...

    Java调用机制步骤

     (回调使用的重点,不同的老师实现相同的回调接口,但是会有不同的实现,因此学生可以选择自己老师来进行汇报,这也是AOP通过反射调用相关方法的原理)  Java 模拟 : class A 实现一个接口 ,class B 调用接口...

    EventBus最佳实践:Java手撕实现ESB底层事件委托处理机制的思路,配套演示代码

    但这种风格下又会导致上游组件并不能快速对下游组件的结果做出反馈,所以通常情况下可以采用AOP切面、函数式回调、委托对象、或者利用传址引用的特性来构建统一上下文的方式来解决。 所以EventBus的实现目标是: 1、...

    after_do:after_do允许您向方法添加简单的回调

    after_do允许您在调用类或模块的特定方法之后/之前执行块(回调)。 如果该类扩展AfterDo ,则可以通过以下方式简单地执行此操作 MyClass.after :some_method do whatever_you_want end # you can also do before ...

    JAVA单例模式源码-goaop-laravel-bridge:Go的集成桥接器!AOP框架和Laravel

    是一个额外的回调,将在具体连接点之前、之后或周围调用。 对于 PHP,每个通知都表示为一个\Closure实例,包装在拦截器对象中。 Aspect 是一个特殊的类,它结合了切入点和通知,每个切入点被定义为一个注解,每个...

    aspiration:进行面向方面编程的受限方法

    如下所述,主要区别在于代码中只有一个地方将回调(在AspectJ术语中称为“ advise”)编织到代码中。 因此,要知道代码在做什么,只需要看两个地方(吸收回调的主机函数和指定回调的一个地方)。 主持人装饰 假设...

    AopSdk.rar

    C# 支付宝支付SDK集成 集成支付宝支付请求,异步回调验证签名,签名,RSA加密同时附上SDK代码…

    《码农翻身》第二章 Java帝国.emmx

    Java帝国之拨云见日识回调 小张的Duck Typing JDBC的诞生 JDBC后传 一个不安分的JDBC驱动 Java帝国之 Java Bean(上) Java帝国之 Java Bean(下) Java帝国之 函数式编程(上) Java帝国之 函数式编程 (下) ...

    Android代码-AvoidOnResult

    无需重写onActivityResult,以回调的方式拿到startActivityForResult的结果,解决了以往跳转页面和处理结果分离的痛点。 同时无需重写onActivityResult也意味着只要你可以拿到一个Activity实例,就可以通过它...

    基于 Swoole 原生协程的新时代 PHP 高性能协程全栈框架,内置协程网络服务器及常用的协程客户端

    PHP 高性能协程全栈框架,内置协程网络服务器及常用的协程客户端,常驻内存,不依赖传统的 PHP-FPM,全异步非阻塞 IO 实现,以类似于同步客户端的写法实现异步客户端的使用,没有复杂的异步回调,没有繁琐的 yield, ...

    swoft_swoft_swoft框架作者_swoftdemo_GO!_widetdn_

    没有复杂的异步回调,没有繁琐的 yield 有类似 Go 语言的协程、灵活的注解、强大的全局依赖注入容器、完善的服务治理、灵活强大的 AOP、标准的 PSR 规范实现等等,可以用于构建高性能的Web系统、API、中间件、基础...

    swoft 全栈框架

    PHP 高性能协程全栈框架,内置协程网络服务器及常用的协程客户端,常驻内存,不依赖传统的 PHP-FPM,全异步非阻塞 IO 实现,以类似于同步客户端的写法实现异步客户端的使用,没有复杂的异步回调,没有繁琐的 yield, ...

    swoft首个基于Swoole原生协程的新时代PHP高性能协程全栈组件化框架

    没有复杂的异步回调,没有繁琐的 yield,有类似 Go 语言的协程、灵活的注解、强大的全局依赖注入容器、完善的服务治理、灵活强大的 AOP、标准的 PSR 规范实现等等,可以用于构建高性能的Web系统、API、中间件、基础...

    Spring 3 Reference中文

    4.6.1.5 启动和关闭回调 73 4.6.1.6 在非Web 应用中,优雅地关闭Spring IoC 容器 74 4.6.2 ApplicationContextAware 和BeanNameAware . 75 4.6.3 其它Aware 接口 75 4.7 Bean 定义的继承. 77 ...

    stratum:通用库,允许通过类似装饰器的机制扩展对象的功能

    您将回调附加到该命令,但稍后您想要实现缓存机制(即:如果项目不在缓存中,则首先查询缓存并委托给前一个回调) AOP (面向方面​​编程)。 由于术语和实现“繁重”,AOP 很困难。 是这样的实现之一 话虽如此,...

Global site tag (gtag.js) - Google Analytics