有用AspectJ开发项目的么?或者计划

03-12-07 justin
希望能和对此有过研究的人进行讨论。

我看了些aosd的论文,也从citeseer上找了些paper看了看,但实际

的项目还没看到用过AOP的。

banq
2003-12-16 17:50
JBoss 4.0用AOP开发的

fiddle
2003-12-17 18:11
想学习,有达人领领路么?

justin
2003-12-25 09:44

google:[ aspect oriented programming filetype:pdf ]

citeseer.nj.nec.com/cs:[ AOP ]

其中

http://www.aosd.net/archive/index.php

有近两年AOSD会议在ACM的论文集

最近我主要在想两个Aspect,一个就是缓存,还有一个是异常

.NET有个AspectC++ Add-In,上面缓存的例子很不错

以下是code:

aspect

include "ResultCache.h"

aspect Cache {
  advice call("% square(...)") : around () {
    if (!cache.find(*(unsigned*)tjp->arg(0), tjp->result())) {
      tjp->proceed();
      cache.insert(*(unsigned*)tjp->arg(0), *tjp->result());
    }
  }
};
<p>

test code

include <stdio.h>
if defined(i386) 
include <unistd.h>
endif 

unsigned square(unsigned s) {
if defined(i386) 
    sleep(1); 
else 
    volatile int j=0;
    for (unsigned i=1; i<10000000; i++) j++;
endif 
  return s*s;
}

int main() {
  for (unsigned i=0; i<2; i++) {
    for (unsigned s=0; s<10; s++) {
      printf("square(%d, %d)\n", s, square(s));
    }
  }
  getchar();
}
<p>

缓存和求平方两个关注点分离了。

异常似乎比较麻烦, 主要是出现exception后forward到何地需要解决,比如通常的SQLException...

有一篇paper:‘a study on exception detection and handling using aspect-oriented programming’值得一看。

先给一个很土的例子(别骂)

package net.tongji.hzt;

aspect ExceptionHandle {

    pointcut all():
        execution(* *(..));

    before() throwing(Exception e) : all() {
        System.out.println("[" + e + "]@"
                + thisJoinPoint.getSignature());
        System.exit(1);
    }
}
<p>

上面的~aspect~表示, 所有类的所有方法中, 只要出现异常,

就记录异常出现的位置, 并终止程序的执行。

以下是一个将要被上面的~aspect~注射的代码:

package net.tongji.hzt;

public class Main {

    public static void main(String[] args) {
        System.out.println("before call foo");
        foo();
        System.out.println("done with call to foo");
    }

    static void foo() {;
        String nullstring = null;
        if (nullstring.equals("nullstring")) {
            System.out.println("if::true");
        }
    }
}
<p>

快考试了,没时间想这些问题了,下学起来了可能会实践一下 ;)

justin
2003-12-25 09:48
AOP 实现 23 种模式

http://www.cs.ubc.ca/~jan/AODPs/

虽然感觉aspectj实现的23GoF patterns很别扭,但还是值得讨论的。

猜你喜欢