编程语言
首页 > 编程语言> > 使用注释的Java代码检测

使用注释的Java代码检测

作者:互联网

我有一个包含大量代码的巨大java项目.让我们假设它看起来像:

fn1(int arg1){...}
fn2(int arg1,int arg2){...}
fn23(){...}
...
fn134(){...}

我想使用注释记录每次函数调用:

@logme("arg1")
fn1(int arg1){...}
@logme("all args")
fn2(int arg1,int arg2){...}
fn23(){...}
...
fn134(){...}

并希望看到

fn1(arg1=223)
fn1(arg1=213,arg2=46)

在我的日志文件中

你会这么善意地向我推荐一些工具吗?

史蒂夫

解决方法:

您可以使用AspectJ&任何日志框架来处理这个要求,
所以你需要做以下事情:

1-创建你的注释,你可以根据自己的意愿获取参数,甚至可以获取一些未定义数量的参数,并像’arg1 = q,arg2 = w,arg3 = e’一样处理它们

2-在这样的新注释上创建一个带切点的方面

@Pointcut(value = "@annotation(loggableActivity)", argNames = "loggableActivity")

注意argNames在这里用来将注释本身发送给处理程序方法,所以你可以从它获取参数,如’arg1 = q,arg2 = w,arg3 = e’,并处理它们

3-在进行方法调用之前,记录你想要的内容,你可以从你的参数中获得几乎所有需要的信息,

注释代码如下所示:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface LoggableActivity {
    String value();

    String args() default "";
}

切点代码看起来像:

@Aspect
public class ActivityLogger {

    private static final Logger logger = LoggerFactory.getLogger("activity");

    @Pointcut(value = "@annotation(loggableActivity)", argNames = "loggableActivity")
    public void loggableUserActivity(LoggableActivity loggableActivity) {

    }

    @Around("loggableUserActivity(loggableActivity)")
    public Object doLoggingUserActivity(ProceedingJoinPoint pjp,
            LoggableActivity loggableActivity) throws Throwable {}

然后在doLoggingUserActivity里面你可以使用像

pjp.proceed(); proceed method call
pjp.getArgs(); gets method arguments
loggableActivity.args(); gets annotation argument as String

然后使用记录器记录它们

标签:java,instrumentation
来源: https://codeday.me/bug/20190903/1798219.html