Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建自定义java注释以记录方法参数_Java_Annotations - Fatal编程技术网

如何创建自定义java注释以记录方法参数

如何创建自定义java注释以记录方法参数,java,annotations,Java,Annotations,我正在编写JavaEE应用程序,我想使用并创建自定义注释,当调用注释方法时,该注释将记录数据。我想做的就是,当调用带注释的方法时,代码迭代所有传递的方法参数,并写入标准输出参数键和值 例如: public class Test { @LogMethodData public int sum(int first, int second) { return first + second; } } 我想实现的是,当一个自定义metod将被@LogMethod

我正在编写JavaEE应用程序,我想使用并创建自定义注释,当调用注释方法时,该注释将记录数据。我想做的就是,当调用带注释的方法时,代码迭代所有传递的方法参数,并写入标准输出参数键和值

例如:

public class Test {

    @LogMethodData
    public int sum(int first, int second) {
        return first + second;
    }
}
我想实现的是,当一个自定义metod将被@LogMethodData注释时,后面的代码将负责将传递的方法参数记录到标准输出(如果参数第一个包含值4,参数第二个包含值5,则类似于“方法数据:第一个-4,第二个-5”),独立于传递给方法的参数数

如果有人能帮我,我会非常高兴,因为我已经在寻找解决方案,但我没有发现任何有用的东西。最后,我对这些东西不熟悉

问候,,
Dahakka

无需定义自己的注释,您可以使用EE容器中的
@拦截器
注释

在拦截器中,您将获得一个包含参数的上下文

public class LoggingInterceptor {
    ...

    @AroundInvoke
    public Object modifyGreeting(InvocationContext ctx) throws Exception {
        ....
        Object[] parameters = ctx.getParameters();
        try {
            return ctx.proceed();
        } catch (Exception e) {
            logger.warning("Error calling ctx.proceed in modifyGreeting()");
            return null;
        }
    }
}

另一个例子:

或者你可以。。。你知道的。。。google annotation教程,而不是搜索已经为您的问题制定的解决方案。可能重复Hi,我已经搜索了一段时间,但没有发现任何有用的内容。我知道,我需要定义接口,但我不知道将业务逻辑放在哪里,业务逻辑将获取方法参数并将它们打印到标准输出。记录方法输入被称为交叉关注点,因为每个方法的运行代码看起来都一样。面向方面编程(AOP)就是为了这个原因而设计的。您应该考虑使用ApStCJ或任何其他AOP解决方案。因此,你不需要注释,它不是重复的费边。我以前读过这个线程,但我不想调用一些特殊的类或方法来记录数据。那个么,当可以调用静态方法时,注释将是无意义的
public class LoggingInterceptor {
    ...

    @AroundInvoke
    public Object modifyGreeting(InvocationContext ctx) throws Exception {
        ....
        Object[] parameters = ctx.getParameters();
        try {
            return ctx.proceed();
        } catch (Exception e) {
            logger.warning("Error calling ctx.proceed in modifyGreeting()");
            return null;
        }
    }
}