-- 作者:admin
-- 发布时间:9/23/2004 12:40:00 AM
-- [合集] AOP中的主要技术
● [合集] AOP中的主要技术发信人: diaochong (静静的雕虫~~小猪), 信区: J2EE 标 题: [合集] AOP中的主要技术 发信站: BBS 水木清华站 (Tue Mar 30 09:40:38 2004), 站内 【 以下文字转载自 JavaClub 讨论区 】 发信人: diaochong (静静的雕虫~~小猪), 信区: JavaClub 标 题: [合集] AOP中的主要技术 发信站: BBS 水木清华站 (Tue Mar 30 09:40:11 2004), 站内 ☆─────────────────────────────────────☆ gty (宜良-丽江-蝴蝶泉) 于 (Fri Feb 21 02:26:15 2003) 提到: 1.Method Interceptor 使用AOP方法,我们可以在运行时产生某个类的Proxy类。例如 UserProxy继承User getName() invoke() invoke() getName() --->UserProxy------->InterceptorA----->InterceptorB--...--->User 2.“多重继承” 在产生UserProxy时,还可以同时给它其他接口使其实现。当UserProxy 实例化时,同时也会创建这些接口的Proxy. 例如需要实现Node接口,Node接口定义了方法getFolder() getFolder() getFolder() getFolder --->UserProxy ------> NodeProxy ----> Node 当然,在NodeProxy调用Node的过程中,也可以有Interceptor. 3 Runtime Attribute 就是利用java doc注释,进行编程。传统情况下,我 们只是把java doc作为注释,并不在运行时使用,现在, 这些java doc也可以作为程序运行时的一个要素了。 --------------------- | 示例: | | @magic.tx type=required | | public void makeOrder(Order order) { | | ... | | }; | | | ------------------------------------------ 在这个例子中,运行时,系统可以通过API访问到 @magic.tx的type是required,从而控制Transaction。 ☆─────────────────────────────────────☆ hax (海曦) 于 (Fri Feb 21 03:16:30 2003) 提到: 最好给点实际实现的代码,还有最后一个用javadoc的例子没看懂。 ☆─────────────────────────────────────☆ bakkhos (笨瓶子) 志存高远·思考永不停步 ) 于 (Fri Feb 21 08:52:58 2003) 提? 有example么,觉得很有价值,但不知具体怎么实现 ☆─────────────────────────────────────☆ gty (宜良-丽江-蝴蝶泉) 于 (Fri Feb 21 09:55:48 2003) 提到: 代码已经check in到sourceforge.net/projects/magicserver上了。 如果周末有时间,我会把aop这一块单独release出来。 ☆─────────────────────────────────────☆ microweb (深呼吸,闭好你的眼睛) 于 (Fri Feb 21 20:30:52 2003) 提到: ☆─────────────────────────────────────☆ microweb (深呼吸,闭好你的眼睛) 于 (Sat Feb 22 13:16:18 2003) 提到: ☆─────────────────────────────────────☆ gty (宜良-丽江-蝴蝶泉) 于 (Sat Feb 22 14:49:03 2003) 提到: 主要是习惯,另外由于数据不复杂,尽量简单吧 Java doc的格式最简单 @key value xdoclet的格式作乐扩展 @key subkey1=value1 subkey2=value2 ☆─────────────────────────────────────☆ gty (宜良-丽江-蝴蝶泉) 于 (Sat Feb 22 15:28:24 2003) 提到: 这要从动态Proxy的基本构成说起,动态Proxy 一般具有下面几个元素: 1. 目标类,被“加工”的接口或类。JDK Dynamic Proxy只 能加工接口,而CGLIB还可以加工类,因为它利用了字节 码工程。 例如,我们可以把User类加工。 以下的元素都是可选的。 2. Interceptor[]。Proxy类把被调用的方法和参数传递给 Interceptor。 例如,我们可以提供RmiInterceptor,HibernateInterceptor. 3. Target,目标对象。每个Proxy对象一般是和特定的 目标对象绑定的。目标对象是目标类的一个实例。 Interceptor可以将调用最终传递给目标对象执行。 例如,userProxy1的目标对象是user1 4. writeReplace函数,这是为了定义Proxy如何实例化。 以上1-4,是Proxy类的基本元素,我们可以把对Proxy类 的定义称为一个Aspect. Aspect还有一个强大的功能是可以嵌套。我们把被嵌套 的Aspect称为SideAspect(这在AOP理论中并没有)。 5. SideAspect[], 在定义Aspect时,还可以提供多个 SideAspect。例如为UserProxy类提供nodeAspect。 nodeAspect的目标类是Node接口。 这样,UserProxy既继承User类,也会实现Node接口。 那么Proxy对象在接到对Node接口的方法调用时,该如何做呢? 我们知道目标对象user1并没有实现Node接口。 窍门在Interceptor上。我们可以实现一个特殊的Interceptor, 让它接到方法调用时,判断是否属于SideAspect的目标类, 如果属于,则利用SideAspect创建一个Proxy对象,并把 调用传递给它。 也就是说,调用被传递给了nodeProxy实例。nodeProxy 如何处理,就和一般的Proxy的调用过程一样了,也要 经过intercpetor,也有可能有自己的sideAspects. ☆─────────────────────────────────────☆ Erratic (漂砾) 于 (Sun Feb 23 11:53:15 2003) 提到: 哪儿可以找到关于AOP基本知识的资料? ☆─────────────────────────────────────☆ microweb (深呼吸,闭好你的眼睛) 于 (Sun Feb 23 14:00:19 2003) 提到: aosd.net ☆─────────────────────────────────────☆ bakkhos (笨瓶子) 志存高远·思考永不停步 ) 于 (Sun Feb 23 17:39:08 2003) 提? 我GOOGLE了一下,发现中文的资料要么比较虚要么比较乱,只能大概知道是怎么样的 英文又没时间看…… ☆─────────────────────────────────────☆ microweb (深呼吸,闭好你的眼睛) 于 (Sun Feb 23 14:00:19 2003) 提到: aosd.net ☆─────────────────────────────────────☆ bakkhos (笨瓶子) 志存高远·思考永不停步 ) 于 (Sun Feb 23 17:39:08 2003) 提? 我GOOGLE了一下,发现中文的资料要么比较虚要么比较乱,只能大概知道是怎么样的 英文又没时间看…… ※ 修改:·qyjohn 于 Mar 30 09:41:48 修改本文·[FROM: 219.238.203.*] 索引页面|上一篇|下一篇
|