Получить значение доступного поля в get pointcut

У меня есть pointcut, который прослушивает доступ к полю в DBRow и всем подклассам.

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

Теперь мне нужно определить значение доступного поля, указанное в get pointcut. Возможно ли это в AspectJ?


person th3falc0n    schedule 12.01.2015    source источник


Ответы (1)


Для 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;
}
person kriegaex    schedule 13.01.2015