如何在Java中使用自定义注释传递字符串和对象

如何在Java中使用自定义注释传递字符串和对象,java,annotations,Java,Annotations,是否有方法通过@LogMethod注释传递值。我想传递一个字符串和一个对象(DataFileVO)。我怎么做 像这样的 @LogMethod(logLevel = LoggerOne.DEBUG, duaNum = "23L", duaDataFile = myListObject) LoggerOne.java public enum LoggerOne { INFO, DEBUG; } @Retention(RetentionPolicy.RUNTIME) @Target(Ele

是否有方法通过@LogMethod注释传递值。我想传递一个字符串和一个对象(DataFileVO)。我怎么做

像这样的

@LogMethod(logLevel = LoggerOne.DEBUG, duaNum = "23L", duaDataFile = myListObject)
LoggerOne.java

public enum LoggerOne {
    INFO, DEBUG;
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface LogMethod {
   LoggerOne logLevel() default LoggerOne.INFO;
 }
public class Util {

public static void log(Object o, String methodName) {
    Class klass = o.getClass();

    for (Method m : klass.getMethods()) {
        if (m.getName().equals(methodName)) {
            for (Annotation a : m.getAnnotations()) {
                if (a instanceof LogMethod) {
                    LogMethod lm = (LogMethod) a;
                    switch (lm.logLevel()) {
                      case INFO:
                        System.out.println("Performing Custom INFO logging for " + m.getName());
                        break;
                      case DEBUG:
                        System.out.println("Performing Custom DEBUG logging for " + m.getName());
                    }
                }
            }
            break;
        }
    }
   }
 }
    @LogMethod(logLevel = LoggerOne.DEBUG)
public List<DuaDataFileVO> getDuaByDuaAndShipperCode(String duaNum, Long shipperCode) {
     List<DuaDataFileVO> list = new ArrayList<DuaDataFileVO>();
     // Some code
        return list;
}
LogMethod.java

public enum LoggerOne {
    INFO, DEBUG;
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface LogMethod {
   LoggerOne logLevel() default LoggerOne.INFO;
 }
public class Util {

public static void log(Object o, String methodName) {
    Class klass = o.getClass();

    for (Method m : klass.getMethods()) {
        if (m.getName().equals(methodName)) {
            for (Annotation a : m.getAnnotations()) {
                if (a instanceof LogMethod) {
                    LogMethod lm = (LogMethod) a;
                    switch (lm.logLevel()) {
                      case INFO:
                        System.out.println("Performing Custom INFO logging for " + m.getName());
                        break;
                      case DEBUG:
                        System.out.println("Performing Custom DEBUG logging for " + m.getName());
                    }
                }
            }
            break;
        }
    }
   }
 }
    @LogMethod(logLevel = LoggerOne.DEBUG)
public List<DuaDataFileVO> getDuaByDuaAndShipperCode(String duaNum, Long shipperCode) {
     List<DuaDataFileVO> list = new ArrayList<DuaDataFileVO>();
     // Some code
        return list;
}
Util.java

public enum LoggerOne {
    INFO, DEBUG;
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface LogMethod {
   LoggerOne logLevel() default LoggerOne.INFO;
 }
public class Util {

public static void log(Object o, String methodName) {
    Class klass = o.getClass();

    for (Method m : klass.getMethods()) {
        if (m.getName().equals(methodName)) {
            for (Annotation a : m.getAnnotations()) {
                if (a instanceof LogMethod) {
                    LogMethod lm = (LogMethod) a;
                    switch (lm.logLevel()) {
                      case INFO:
                        System.out.println("Performing Custom INFO logging for " + m.getName());
                        break;
                      case DEBUG:
                        System.out.println("Performing Custom DEBUG logging for " + m.getName());
                    }
                }
            }
            break;
        }
    }
   }
 }
    @LogMethod(logLevel = LoggerOne.DEBUG)
public List<DuaDataFileVO> getDuaByDuaAndShipperCode(String duaNum, Long shipperCode) {
     List<DuaDataFileVO> list = new ArrayList<DuaDataFileVO>();
     // Some code
        return list;
}
DataFileDaoImpl.java

public enum LoggerOne {
    INFO, DEBUG;
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface LogMethod {
   LoggerOne logLevel() default LoggerOne.INFO;
 }
public class Util {

public static void log(Object o, String methodName) {
    Class klass = o.getClass();

    for (Method m : klass.getMethods()) {
        if (m.getName().equals(methodName)) {
            for (Annotation a : m.getAnnotations()) {
                if (a instanceof LogMethod) {
                    LogMethod lm = (LogMethod) a;
                    switch (lm.logLevel()) {
                      case INFO:
                        System.out.println("Performing Custom INFO logging for " + m.getName());
                        break;
                      case DEBUG:
                        System.out.println("Performing Custom DEBUG logging for " + m.getName());
                    }
                }
            }
            break;
        }
    }
   }
 }
    @LogMethod(logLevel = LoggerOne.DEBUG)
public List<DuaDataFileVO> getDuaByDuaAndShipperCode(String duaNum, Long shipperCode) {
     List<DuaDataFileVO> list = new ArrayList<DuaDataFileVO>();
     // Some code
        return list;
}
@LogMethod(logLevel=LoggerOne.DEBUG)
public List getDuaByDuaAndShipperCode(字符串duaNum,长shipperCode){
列表=新的ArrayList();
//一些代码
退货清单;
}

注释只是“元数据”,而不是具体程序的一部分。 因此,如果您正在编译一个程序,元数据将不再存在

阅读更多信息

我认为你可以用“面向方面编程”来解决你的问题。 这里有一个教程

以下代码来自本教程。

重要的代码是方面:

这个方面是围绕着一个执行(方法)工作的,该执行(方法)具有任何修饰符、任何名称和任何参数,并用@Loggable注释。 MethodLogger打印一个带有类路径、方法名、参数、结果和执行方法的执行时间的“Info”

您可以这样使用此注释:

使用此示例输出:

您需要此依赖项来编译:


com.jcabi
jcabi方面
org.aspectj
aspectjrt
这篇教程非常有用。 要想弄清楚它为什么有效,请通读一遍


我希望它能帮助您。

注释只是“元数据”,而不是具体程序的一部分。 因此,如果您正在编译一个程序,元数据将不再存在

阅读更多信息

我认为你可以用“面向方面编程”来解决你的问题。 这里有一个教程

以下代码来自本教程。

重要的代码是方面:

这个方面是围绕着一个执行(方法)工作的,该执行(方法)具有任何修饰符、任何名称和任何参数,并用@Loggable注释。 MethodLogger打印一个带有类路径、方法名、参数、结果和执行方法的执行时间的“Info”

您可以这样使用此注释:

使用此示例输出:

您需要此依赖项来编译:


com.jcabi
jcabi方面
org.aspectj
aspectjrt
这篇教程非常有用。 要想弄清楚它为什么有效,请通读一遍


我希望它能帮助您。

注释只是“元数据”,而不是具体程序的一部分。 因此,如果您正在编译一个程序,元数据将不再存在

阅读更多信息

我认为你可以用“面向方面编程”来解决你的问题。 这里有一个教程

以下代码来自本教程。

重要的代码是方面:

这个方面是围绕着一个执行(方法)工作的,该执行(方法)具有任何修饰符、任何名称和任何参数,并用@Loggable注释。 MethodLogger打印一个带有类路径、方法名、参数、结果和执行方法的执行时间的“Info”

您可以这样使用此注释:

使用此示例输出:

您需要此依赖项来编译:


com.jcabi
jcabi方面
org.aspectj
aspectjrt
这篇教程非常有用。 要想弄清楚它为什么有效,请通读一遍


我希望它能帮助您。

注释只是“元数据”,而不是具体程序的一部分。 因此,如果您正在编译一个程序,元数据将不再存在

阅读更多信息

我认为你可以用“面向方面编程”来解决你的问题。 这里有一个教程

以下代码来自本教程。

重要的代码是方面:

这个方面是围绕着一个执行(方法)工作的,该执行(方法)具有任何修饰符、任何名称和任何参数,并用@Loggable注释。 MethodLogger打印一个带有类路径、方法名、参数、结果和执行方法的执行时间的“Info”

您可以这样使用此注释:

使用此示例输出:

您需要此依赖项来编译:


com.jcabi
jcabi方面
org.aspectj
aspectjrt
这篇教程非常有用。 要想弄清楚它为什么有效,请通读一遍



我希望它能帮助您。

不确定您想要达到什么目的。类似的事情是可能的:@LogMethod(logLevel=LoggerOne.DEBUG,message=“DEBUG Prefix:”)。但是将任何动态数据附加到注释或类似的东西显然是不可能的(注释附加到方法,而不是特定的调用…)@LogMethod(logLevel=LoggerOne.DEBUG,duaNum=“23”,duaDataFile=“somelistObject”)当然可以。您可以向注释提供任何喜欢的静态数据。只需将“int duaNum();”等方法添加到注释声明中,您的代码就可以对该数据执行任何操作。那么整个对象呢?不,只有原语、字符串、类对象。。。没有其他的例子。不确定你想要达到什么。类似的事情是可能的:@LogMethod(logLevel=LoggerOne.DEBUG,message=“DEBUG Prefix:”)。但是将任何动态数据附加到注释或类似的东西显然是不可能的(注释附加到方法,而不是特定的调用…)@LogMethod(logLevel=LoggerOne.DEBUG,duaNum=“23”,duaDataFile=“somelistObject”)当然可以。您可以向注释提供任何喜欢的静态数据。只需将“int duaNum();”等方法添加到注释声明中,您的代码就可以对该数据执行任何操作。那么整个对象呢?不,只有原语、字符串、类对象。。。没有其他insta