`
gty509
  • 浏览: 55608 次
  • 性别: 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回调,使得我们可以优雅地处理预处理和后处理逻辑,而不会让原本的代码变得混乱。这种方法提高了代码的可读性和可维护性,同时也使得添加新的...

    浅谈JAVA回调机制1

    在Spring框架中,回调机制常用于拦截器(Interceptor)和AOP(面向切面编程),允许在方法调用前后插入自定义逻辑。此外,回调还可以用于线程间的通信,例如在多线程编程中,一个线程完成特定任务后通知另一个线程...

    spring、ioc、aop、callback

    在 Spring 中,回调机制常用于处理事件或者在生命周期中执行特定任务,如 Bean 的初始化和销毁。开发者可以通过实现特定接口或使用注解来定义回调方法。 结合这些概念,我们可以创建一个灵活、可扩展的系统。例如,...

    ssh框架整合分页--内部类回调函数

    SSH框架整合分页——内部类回调函数 SSH(Spring、Struts2、Hibernate)是Java Web开发中常用的一种集成框架,它将Spring的IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面...

    Java spring AOP源码

    当调用代理对象的方法时,实际上会进入一个回调函数,如下所示: ```java public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { // ... (省略部分...

    spring AOP 引入jar包,spring IOC 引入Jar包

    4. **Bean 的生命周期**:包括实例化、初始化、配置、使用和销毁等阶段,可以通过各种生命周期回调方法自定义处理。 5. **自动装配(Auto-Wiring)**:容器可以根据 Bean 的名称、类型或注解自动为 Bean 注入依赖,...

    spring ioc和aop原理流程图(详细)

    5. **Bean的生命周期**:Spring容器对Bean的生命周期进行管理,包括初始化、正常使用、销毁等阶段,开发者可以自定义生命周期回调方法以进行特定操作。 ### Spring AOP **面向切面编程(AOP)** 是Spring的另一个...

    死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序.pdf

    `Enhancer` 是 CGLIB 的核心类,用于创建代理对象,而 `Callback` 是一个回调接口,它定义了代理对象在方法调用时需要执行的操作。在 Spring AOP 中,`ObjenesisCglibAopProxy` 类负责使用 CGLIB 创建代理对象,它会...

    Spring AOP框架实现的结构分析

    许多 AOP 框架都以拦截器的形式来表现增强--所谓拦截器是这样的一个对象:当连接点被调用时,它会收到一个回调消息。基本的增强有前增强、后增强、环绕增强等。引介是为一个现有的 Java 类或接口添加方法或字段。...

    JavaEE spring自动实现AOP代理

    - CGLIB通过字节码技术生成代理类,使用`net.sf.cglib.proxy.Enhancer`类,设置回调函数`Callback`(如MethodInterceptor),并在调用目标方法时插入切面逻辑。 3. **AOP代理的配置**: - 在Spring配置文件中,...

    Android-logging-aspect项目中日志收集实现AOP和Listener两种全局实现

    其次,Listener(监听器)是Android开发中的常见模式,用于在特定事件发生时执行回调函数。在这个logging-aspect项目中,可能是创建了一个全局的Activity或者Application监听器,对整个应用的生命周期事件进行监听,...

    Android-一个使用AOP思想的Android动态请求框架

    3. 实现回调接口:创建并实现权限请求的回调接口,处理权限请求的结果。 4. 调用权限请求:在适当的时候调用框架提供的方法启动权限请求。 **总结** Shiba-Inu-Permission框架通过AOP技术,为Android开发者提供了一...

    Spring基础:AOP编程(4)

    另外,Spring还提供了注解型的通知,如`@PostConstruct`和`@PreDestroy`,它们分别对应于对象初始化后和销毁前的回调。 在处理事务管理时,Spring AOP提供了`@Transactional`注解,可以很方便地实现事务的声明式...

    AOP、CGLIB

    2. **设置回调方法**:CGLIB通过Callback接口实现对目标方法的增强,例如MethodInterceptor接口用于拦截方法调用。 3. **设置目标类**:通过setSuperclass方法设定要代理的类。 4. **生成代理对象**:通过create...

    用Java动态代理实现AOP

    一般来说要截获一个方法,我们可以采用回调方法或者动态代理。动态代理一般要更加灵活一些,目前多数的AOP框架也大都采用了动态代理来实现。 下面,我们将使用动态代理来实现AOP。首先,我们需要定义一个日志处理器...

    类似spring Aop的Proxy封装

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

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

    AOP是软件开发中的一个重要概念,它可以将系统中的横切关注点(Cross-Cutting Concerns)从业务逻辑中分离出来,以提高系统的灵活性、可维护性和可扩展性。 在Spring框架中,AOP是通过使用AspectJ库来实现的。...

    JavaEE CGLIB字节码增强方式实现AOP编程

    通过调用其setSuperclass()方法指定被代理的类,setCallback()方法设置回调机制。 3. 获取代理对象:通过Enhancer的create()方法,可以得到目标类的代理对象。 **CGLIB的回调机制**: CGLIB使用Callback接口及其...

    spring-aop.rar

    2. 通知(Advice):在特定的切点执行的代码,如before、after、around等不同类型的回调方法。 3. 切点(Pointcut):定义何时执行通知的规则,可以是特定的方法调用、异常抛出等。 4. 连接点(Join Point):程序...

Global site tag (gtag.js) - Google Analytics