我有一个切入点,它监听对DBRow和所有子类中的字段的访问

before(DBRow targ) throws DBException: get(@InDB * DBRow+.*) && target(targ) {
    targ.load();
}


现在,我需要确定get切入点指定的acesed字段的值。
在AspectJ中这可能吗?

最佳答案

对于set()切入点,您可以通过args()绑定值,但对于get()切入点则不能。因此,为了在没有任何反省技巧的情况下获取价值,只需使用around()建议而不是before()。这样,您就可以将字段值作为返回值proceed()

Object around(DBRow dbRow) : get(@InDB * DBRow+.*) && target(dbRow) {
    Object value = proceed(dbRow);
    System.out.println(thisJoinPoint);
    System.out.println("  " + dbRow + " -> " + value);
    dbRow.load();
    return value;
}

09-26 03:06