如何在Java中使用自定义注释传递字符串和对象
是否有方法通过@LogMethod注释传递值。我想传递一个字符串和一个对象(DataFileVO)。我怎么做 像这样的如何在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(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