Использование Aspect для аннотирования методов с помощью @InsightOperation для Spring Insight. - PullRequest
1 голос
/ 18 мая 2011

Я хотел использовать большое количество классов для использования с Spring Insight , и вместо того, чтобы вручную добавлять @InsightOperation в методы, я написал аспект для аннотирования методов с использованием точечных сокращений.

Однако это не работает. Хотя ручная аннотация влияет на ведение журнала трассировки Spring Insight, метод AspectJ не работает.

Есть ли что-то, что я делаю здесь не так? (Я декомпилировал классы после уточнения и нахожу аннотацию в методах класса)

Это фрагмент кода аспекта:

declare @method :public * com.example.IExample.execute(..) : @InsightOperation;

Ответы [ 3 ]

0 голосов
/ 19 мая 2011

Возможно, что Insight LTW не заберет введенные вами аннотации. Мне придется копать глубже.

А пока вы можете попробовать более низкоуровневую аннотацию:

   com.springsource.insight.collection.method.MethodOperationsCollected

Если вы посмотрите на плагин Spring-Core, вы увидите, что он делает нечто подобное:

  public aspect RepositoryMethodOperationCollectionAspect {
      declare @type: @Repository * : @MethodOperationsCollected;
  }
0 голосов
/ 07 февраля 2013

Обходной путь - вызвать другой метод из вашего аспектного метода, чтобы продолжить выполнение точки соединения.Я только попытался вызвать статический метод в статическом классе.Ниже приведен мой код для добавления @InsightOperation ко всей моей сериализации JSON.

Мой аспект:

@Aspect
public class JSONSerializerAspect {

@Around("call(* *.JSONSerializer.serialize(..)) && args(target)")
public Object serialize(ProceedingJoinPoint joinPoint, Object target) throws Throwable {
      return JSONSerializationWrapper.serialize(joinPoint, target);
    }
}

Статический класс, который он вызывает:

public class JSONSerializationWrapper {

    @InsightOperation(label = "JSON_SERIALIZATION")
    public static Object serialize(ProceedingJoinPoint joinPoint, Object target) throws Throwable {
        return joinPoint.proceed(new Object[]{target});
    }

}

IЯ использую это сам и проверил, что это работает.

0 голосов
/ 19 мая 2011

В документации Spring сказано следующее:

Использование аннотаций @ Insight * необязательно.Они позволяют конечным пользователям легко определять пользовательские рабочие рамки и конечные точки без необходимости создания подключаемого модуля.Поскольку для использования аннотаций требуется изменение кода конечного пользователя, они предназначены для пользователей, которые не могут или не хотят писать аспекты.

http://static.springsource.com/projects/tc-server/2.5/devedition/htmlsingle/devedition.html

единственный способ - написать собственный плагин

http://static.springsource.com/projects/tc-server/2.5/devedition/htmlsingle/devedition.html#tutorial-plugin

...