Отражение: получить состояние объекта из возвращаемого типа метода во время выполнения - PullRequest
1 голос
/ 15 октября 2011

Есть аннотированный Java-класс несколькими методами:

@CustomAnnotation
public class MyService {

public List<MyObject> getMyObjects(){
...
}

public SomeObject getSomeObject(){
...
}

}

Я должен регистрировать значения полей экземпляров MyObject и SomeObject.

aspectj часть, где MyService объект получил:

public void logg2(JoinPoint jp) {
    Object target = jp.getTarget();

}

target - это класс MyService, который содержит методы.

Как получить значения полей экземпляра для MyObject и SomeObject, которые возвращаются из методов класса MyService в среде выполнения?

Ответы [ 2 ]

1 голос
/ 16 октября 2011
@Around(value = "traceReturnedObjectsFields()")
public Object traceAnotherOne(ProceedingJoinPoint jp) throws Throwable {
    Object res = null;
    res = jp.proceed();
    if (res == null)
        return res;
    Class<?> c1 = res.getClass();
    Field[] fields = c1.getDeclaredFields();
    AccessibleObject.setAccessible(fields, true);
    for (Field field : fields) {
        if (!Modifier.isStatic(field.getModifiers())) {
            System.out.println(field + " = " + field.get(res));
        }
    }
    return res;
}
0 голосов
/ 15 октября 2011
Object target = jp.getTarget();
for (Class<?> superclass = target.getClass();
     superclass != Object.class;
     superclass = superclass.getSuperclass())
{
   Field[] fields = superclass.getDeclaredFields();
   AccessibleObject.setAccessible(fields, true);
   for (Field field : fields)
   {
      if (!Modifier.isStatic(field.getModifiers()))
      {
         System.out.println(field + " = " + field.get(target));
      }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...