如鹏网 大学生计算机学习社区

CowNew开源团队

http://www.cownew.com 邮件请联系 about521 at 163.com

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  363 随笔 :: 2 文章 :: 808 评论 :: 0 Trackbacks

下面是 AOP 的一些基本概念

aspect (方面):实现了 cross-cutting 功能,是针对方面的模块,是为题的不同关注点,我们可以将这些方面通过某种方式加入到核心关注点中。

jointpoint (连接点):连接点是方面插入应用程序的地方,该点能被方法调用。

advice (通知): advice 是我们关注点功能的实现,它通知程序新的行为。如在权限处理中, permission advice 包括权限控制的实现代码。

pointcut (切入点): pointcut 可以指定把哪些 advice 应用到 jointpoint 上去、如何应用上去以及应用的位置。

AOP 包括三个开发步骤:

关注点分解:分解需求提取出横切关注点和一般关注点。把核心模块级关注点和系统级的横切关注点分离开来。就前面所提到的网上购物系统来说,可以分解出四个关注点:核心的订单处理、权限、日志和事务。

关注点实现:各自独立的实现这些关注点。

关注点的重新组合:在这一步里,通过创建一个模块单元来指定关注点重组的规则。重组过程被称为织入( Weaving )。以前边的网上购物系统来说,可以通过某种方式指定每个操作结束后需要记录日志、操作开始前要验证是否有权限、操作失败要事务回滚。

 

 

下面是 AspectJ 实现日志记录的一个例子:

public aspect AutoLog

{ 

pointcut publicMethods() :

execution(public * org.apache.cactus..*(..));

pointcut logObjectCalls() :

execution(* Logger.*(..));

pointcut loggableCalls() :

publicMethods() && ! logObjectCalls();

before() : loggableCalls()

{

Logger.entry(thisJoinPoint.getSignature().toString());

}

after() : loggableCalls()

{

Logger.exit(thisJoinPoint.getSignature().toString());

}

}

可以看到,这里边有很多 Java 中没有的关键字,比如 aspect pointcut 等。这些关键字都是 AspectJ 提供的,使用这些扩展我们可以用 AspectJ Java 类增加字段及方法,甚至使 Java 支持多继承。

 

 

Spring 没有自己进行 AOP 技术的实现 , 它的主要实现技术来自于 AOP 联盟( AOPAlliance )。

Spring AOP 中的术语不像 AspectJ 那样多,因而也更容易理解和学习。只要理解三个概念就可以, advice pointcut advisor

advice 是要向别的模块内部不同的地方注入的代码

pointcut 定义了需要注入 advice 的位置,通常是某个特定的类的一个 public 方法

advisor pointcut advice 的装配器,是将 advice 注入主程序中预定义位置的代码

posted on 2007-02-20 00:50 CowNew开源团队 阅读(193) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: