1

我想检测大量类以与Spring Insight一起使用,而不是手动将 @InsightOperation 添加到方法中,我编写了一个切面来使用切点注释方法。

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

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

这是方面的代码片段:

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

4

3 回答 3

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

于 2011-05-19T07:21:37.953 回答
0

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

}

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

于 2013-02-07T07:49:31.577 回答
0

Insight LTW 可能不会选择您引入的注释。我将不得不深入挖掘。

同时,您可以尝试更底层的注解:

   com.springsource.insight.collection.method.MethodOperationsCollected

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

  public aspect RepositoryMethodOperationCollectionAspect {
      declare @type: @Repository * : @MethodOperationsCollected;
  }
于 2011-05-19T07:58:35.287 回答