动态代理和nanning AOP-3

原创 2004年04月28日 22:46:00

动态代理和nanning AOP-3

                                     nanning来实现Interception

关键字:  AOP  Nanning   Dynamic proxy AOP 动态代理

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

       Interception ,是AOP的特点之一,但是Interception这个名次并不是和AOP的概念一同产生的。顾名思义,Interception就是拦截。本系列的第一篇文章使用java1.3提供的动态代理功能实现了一个Interception的例子,演示了在某个方法执行前和执行后进行了拦截(Interception)。

       本文我们用nanning AOP来实现同样的功能。

       注意AOP中的Interception和普通概念的interception是不同的。我们最后再讨论这个问题。

       代码如下:

package tcftest;

import com.tirsen.nanning.AspectInstance;

import com.tirsen.nanning.Aspects;

import com.tirsen.nanning.Intf;

import com.tirsen.nanning.IntfImpl;

import com.tirsen.nanning.MixinInstance;

import com.tirsen.nanning.NullInterceptor;

public class tcftest {

    public tcftest() {

    }

    public static void main(String[] args) {

       AspectInstance aspectInstance = new AspectInstance();

       MixinInstance mixinInstance = new MixinInstance();

       mixinInstance.setInterfaceClass(Intf.class);

       mixinInstance.setTarget(new IntfImpl());

       mixinInstance.addInterceptor(new NullInterceptor());

       aspectInstance.addMixin(mixinInstance);

       Object bigMomma = aspectInstance.getProxy();

       Intf intf = (Intf) bigMomma;

       intf.call();     

    }

}

 

消息拦截接口如下:

package com.tirsen.nanning;

import com.tirsen.nanning.definition.SingletonInterceptor;

public class NullInterceptor implements MethodInterceptor, SingletonInterceptor {

    public NullInterceptor() {

    };

    public Object invoke(Invocation invocation) throws Throwable {

       System.out.println("tcf : befor call me , right? ");

       return invocation.invokeNext();

    }

}

输出结果如下:

tcf : befor call me , right?

call()

 

关于:

       Intf.class

       IntfImpl.class

类的代码可以参考上文实现,因为很简单,就不贴出来了。

NullInterceptor.java 的代码,可以在nanning提供的测试包中找到。

我在其中加入了:     System.out.println("tcf : befor call me , right? ");

另外:Eclipse M8 的中文问题我还没有解决,谁知道的话请告诉我,谢谢。

注意上面代码的蓝色代码:

可以看到:intf.call() 在这个方法执行之前打印了我们预期的结果,成功地实现了消息的拦截。这个效果和本系列的第一篇文章介绍的java动态代理实现的效果一样。

 

    现在是时候介绍用 java动态代理和nanning 实现Interception 的不同。

AOP中的Interception是允许动态指定的,这个动态指定的点就是point cut

相信熟悉aop的读者对point cut 都了解。而普通的Interception就不能这样了,是固定写在java程序中。 当然如果你通过设计模式,配置文件等可以让Interception动态指定的话,那你也基本作了一个AOP Interception

    这就是Nanning已经作的工作。

下文我们分析nanningAOP的实现原理。

 

作者:田春峰

专栏地址:http://www.csdn.net/develop/author/NetAuthor/accesine960/

 

 

 

版权声明:本文为博主原创文章,在不删除、修改文章内容的情况下,可以自由转载。

动态代理和nanning AOP-2 实现Introduction

动态代理和nanning AOP-2                                     用nanning来实现Introduction 关键字:  AOP  Nanning   ...
  • accesine960
  • accesine960
  • 2004年04月28日 22:46
  • 2191

动态代理和nanning AOP(1)

            动态代理和nanning AOP                                      关键字:  AOP  Nanning   Dynamic proxy...
  • accesine960
  • accesine960
  • 2004年04月28日 22:46
  • 3126

ACM/ICPC 2017 Nanning Regional 总结

这是我的第一赛季的最后一场比赛,本来很不愿意写这个总结,但是想了想还是写吧。先来说说比赛和南宁,这次去南宁就耗费了大量的时间在火车上,虽然到了第二天才开始热身赛,长途的奔波的确让我们几个感到身心疲惫。...
  • lingzidong
  • lingzidong
  • 2017年11月30日 21:25
  • 75

动态代理与装饰器模式的区别

这里,假设大家已经基本了解动态代理与装饰器模式。 我们知道增强一个类的功能而不改变这个类的源码,我们可以有动态代理和装饰器模式这两种办法。(本文讨论的区别只是基于增强类功能的区别) 那么我们该如何选择...
  • jiji1995
  • jiji1995
  • 2017年03月29日 21:11
  • 556

[jvm解析系列][十四]动态代理和装饰模式,带你看源码深入理解装饰模式和动态代理的区别。

不知道大家知不知道设计模式中有一种叫做装饰,举一个简单的例子。 一天一个年轻领导小王讲话:咳咳,我们一定要xxx抓紧xxxx学习xxx的精神!好,今天的会议结束! 然后有一个老领导李同志接过来说:...
  • u014629433
  • u014629433
  • 2016年06月16日 19:26
  • 1215

动态代理与静态代理区别

一、代理概念  为某个对象提供一个代理,以控制对这个对象的访问。 代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委...
  • ikownyou
  • ikownyou
  • 2016年11月08日 13:47
  • 4394

静态代理和动态代理的理解

Java 静态代理 静态代理通常用于对原有业务逻辑的扩充。比如持有二方包的某个类,并调用了其中的某些方法。然后出于某种原因,比如记录日志、打印方法执行时间,但是又不好将这些逻辑写入二方包的方法里...
  • WangQYoho
  • WangQYoho
  • 2017年08月25日 18:04
  • 484

黑马程序员--装饰设计模式和动态代理

装饰设计模式: 装饰设计模式解决:对一组类进行功能的增强。 包装:写一个类(包装类)对被包装对象进行包装;  * 1、包装类和被包装对象要实现同样的接口;  * 2、包装类要持有一个被包装对象;  *...
  • u014481780
  • u014481780
  • 2015年05月10日 19:18
  • 574

反射和动态代理的区别

好吧,我承认,这个博客的名称都是有点问题的。因为笔者这个时候也有点混沌,但是我坚信这个应该是在将要质变的时候才会有的状态。 步入正文:反射和动态代理的区别。 动态代理,代理,前面已经有一篇文章说了...
  • wltsysterm
  • wltsysterm
  • 2017年03月31日 09:10
  • 864

JAVA的反射机制与动态代理

JAVA的反射机制与动态代理    运行时类型信息(RunTime  Type  Information,RTTI)使得你在程序运行时发现和使用类型 信息。RTTI主要用来运行时获取向上转型之后...
  • ItJavawfc
  • ItJavawfc
  • 2014年11月16日 10:58
  • 1980
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态代理和nanning AOP-3
举报原因:
原因补充:

(最多只允许输入30个字)