使用Aspect使用@InsightOperation为Spring Insight注释方法

时间:2011-05-18 11:30:19

标签: spring aop aspectj spring-insight

我想要使用Spring Insight来设置大量类,而不是手动将@InsightOperation添加到方法中,我写了一个方面来使用点切割来注释方法。

但是,这不起作用。虽然手动注释会影响Spring Insight跟踪日志记录,但AspectJ方法不起作用。

我在这里做错了吗? (我在aspectizing后反编译了类,并在类方法中找到了注释)

这是方面代码段:

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

Insight LTW可能无法获取您介绍的注释。我将不得不深入研究它。

与此同时,您可以尝试更低级别的注释:

   com.springsource.insight.collection.method.MethodOperationsCollected

如果你看一下spring-core插件,你会发现它做了类似的事情:

  public aspect RepositoryMethodOperationCollectionAspect {
      declare @type: @Repository * : @MethodOperationsCollected;
  }

答案 2 :(得分:0)

一个简单的解决方法是从aspect方法中调用另一个方法来继续执行连接点。我只尝试在静态类中调用静态方法。请参阅下面的代码,将@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});
    }

}

我自己使用它并测试它是否有效。