• 2004-08-21

    简单介绍AspectJ的高级特性(三)

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://befresh.blogbus.com/logs/341496.html

    四、Exception softening

    在Java中有两类异常:checked和unchecked exceptions。一般checked exceptions是需要我们捕获,或者重新抛出,而unchecked exceptions主要包括RuntimeException和Error,是不需要捕获的。

    所谓的Exception softening就是可以把checked exceptions软化成unchecked exceptions。Exception softening的语法如下:

    declare soft : <ExceptionTypePattern> : <pointcut>;

    Exception softening可以应用在一些特殊场合。譬如:在DAO层,程序一般会抛出SQLException,如果这是涉及到核心处理,你就可以进行软化,把SQLException软化成unchecked exceptions。

    下面,介绍一种非常神奇的特性:

    五、Privileged aspects

    在AspectJ中,aspect的访问规则与Java class是相同的,使用private声明的field、method等,在别的类中是不能访问的。

    但是,在有一些场合,你一定需要访问别的类中的private内容,那该怎么办呢?AspectJ为我们提供了“privileged”关键字。只要你在aspect前加上这个关键字,你就可以访问到私有数据。示例如下:

    public class PrivilegedData {

      private String _id = "private";

      public void method1() {
        System.out.println("PrivilegedData.method1");
      }

    }

    public privileged aspect PrivilegedDataAspect {

      before(PrivilegedData callee) : call(void PrivilegedData.method1()) && target(callee) {
          System.out.println("<PrivilegedDataAspect:before objectId=\""+ callee._id + "\"");
      }

    }

    在上面的例子中,PrivilegedDataAspect就访问了PrivilegedData中的private field,红色_id就是一个private field。


    收藏到:Del.icio.us




    引用

    下面Blog引用了该文: