我想要使用Spring Insight来设置大量类,而不是手动将@InsightOperation添加到方法中,我写了一个方面来使用点切割来注释方法。
但是,这不起作用。虽然手动注释会影响Spring Insight跟踪日志记录,但AspectJ方法不起作用。
我在这里做错了吗? (我在aspectizing后反编译了类,并在类方法中找到了注释)
这是方面代码段:
declare @method :public * com.example.IExample.execute(..) : @InsightOperation;
答案 0 :(得分:0)
Spring文档说明了这一点:
使用@ Insight *注释 可选的。它们使结束变得容易 用户定义自定义操作 帧和终点无需 创建一个插件。因为最终用户 代码修改需要使用 注释,它们是一种选择 对于不能或不愿意的用户 写方面。
http://static.springsource.com/projects/tc-server/2.5/devedition/htmlsingle/devedition.html
所以看起来唯一的方法是编写自定义插件
答案 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});
}
}
我自己使用它并测试它是否有效。