java自定义Annotation,得到注解类中Annotation设定的注解值

java注解机制在各大框架中应用普遍,注解中可以设置一些值,如何得到呢.

要得到注解类中Annotation设定的注解值 即:遍历自定义Annotation中的方法,反射执行方法,结果就是 对应的注解值。

java代码例子:

package com.doctor.spring.core;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Method;

/**
 * 自定义Annotation,得到注解类中Annotation设定的注解值 即:遍历自定义Annotation中的方法,反射执行方法,结果就是
 * 对应的注解值。
 *
 * 对应复杂注解的处理参看:{@code AnnotationUtils}
 *
 * @author doctor
 *
 * @time 2015年1月23日 下午6:15:31
 */

public class AnnotationPractice {

	public static void main(String[] args) throws ReflectiveOperationException {
		MyAnnotation myAnnotation = AnnotationP.class.getAnnotation(MyAnnotation.class);
		System.out.println(myAnnotation);
		// 输出:
		// @com.doctor.spring.core.AnnotationPractice$MyAnnotation(value=AnnotationP,
		// num=12, address=[1, 2])

		for (Method method : myAnnotation.annotationType().getDeclaredMethods()) {
			if (!method.isAccessible()) {
				method.setAccessible(true);
			}
			Object invoke = method.invoke(myAnnotation);
			System.out.println("invoke methd " + method.getName() + " result:" + invoke);
			if (invoke.getClass().isArray()) {
				Object[] temp = (Object[]) invoke;
				for (Object o : temp) {
					System.out.println(o);
				}
			}
		}
		// 输出:
		// invoke methd num result:12
		// invoke methd value result:AnnotationP
		// invoke methd address result:[Ljava.lang.String;@74a14482
		// 1
		// 2

	}

	@Retention(RetentionPolicy.RUNTIME)
	@Target(ElementType.TYPE)
	@Documented
	private @interface MyAnnotation {
		String value() default "";

		int num() default 100;

		String[] address() default {};
	}

	@MyAnnotation(value = "AnnotationP", num = 12, address = { "1", "2" })
	private static class AnnotationP {

	}
}
时间: 2024-11-04 22:38:04

java自定义Annotation,得到注解类中Annotation设定的注解值的相关文章

Java通过反射机制修改类中的私有属性的值

首先创建一个类包含一个私有属性: class PrivateField{ private String username = "Jason"; } 通过反射机制修改username的值: //创建一个类的对象 PrivateField privateField = new PrivateField(); //获取对象的Class Class<?> classType = privateField.getClass(); //获取指定名字的私有域 Field field =

Java线程状态及Thread类中的主要方法

要想实现多线程,就必须在主线程中创建新的线程对象. 任何线程一般具有5种状态,即创建,就绪,运行,阻塞,终止. 创建状态: 在程序中用构造方法创建了一个线程对象后,新的线程对象便处于新建状态,此时,他已经有了相应的内存空间和其他资源,但还处于不可运行状态. 就绪状态: 新建线程对象后,调用该线程的start()方法可以启动线程.当线程启动时,线程进入就绪状态.此时,线程将进入线程队列排队,等待CPU服务,这表明它已经具备了运行条件.-------(运行start()方法只是进入就绪状态,并没有开

窗体的基类中没有设定大小,所以才不能居中,若要窗体居中,必须使用setfixedsize()函数或者resize()函数设定窗体的大小,居中才能正常使用

最近开发中,遇到了窗体不能居中的问题,看了网上的很多文章,窗口居中,无非都是move至窗口的中心目标; 有两种方式, 一种在构造函数中直接计算中心坐标; 另一种是在窗口show后再move至相应坐标.但是自己在构造函数中添加了对应的句子以后,窗体不在窗口的(0,0)点显示,反而在右下角显示,自己很是郁闷.网上的两种方法,基本操作如下: 方法一:在窗口(QWidget类及派生类)的构造函数中添加如下代码: #include <QDesktopWidget> //.......QDesktopWi

Hibernate在实体类中对于时间的注解

在时间类型DATE 属性上添加一个 @Temporal(TemporalType.DATE)(精确到年月日)@Temporal(TemporalType.TIME)(精确到时分秒)@Temporal(TemporalType.TIMESTAMP)(默认年月日时分秒)示例: @Temporal(TemporalType.DATE)private Date updateDate; 有了这个就不需要用java代码将时间戳,转换成需要的日期格式.直接在实体类中进行注解!

java 多线程3:Thread类中的静态方法

Thread类中的静态方法 Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程".为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程进行操作.下面来看一下Thread类中的静态方法: 1.currentThread() currentThread()方法返回的是对当前正在执行线程对象的引用.看一个重要的例子,然后得出结论: public class MyThread04 extends Thread { static { System.o

使用Java的反射功能调用类中的方法

最近一直在搞Java的反射,今天使用反射调用方法时出现了很多问题,主要是没有详细参考官方API.所以走了很多弯路. 所以想把这个例子记下来,供自己也供他人学习. package com.mine.practice.reflect; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * 使用反射调用类中的方法 * @author 2014-11-5 上午10:51:28

使用在类中定义的有返回值的函数,如何得到执行结果反馈?

我们做开发时,程序执行完后最好会有个反馈结果,尤其是在庞大的程序中,如果有bug可以及时发现,不然很浪费时间...最近做sde的二次开发,创建数据集时要用到带有返回值的函数,因为在数据集上创建要素类需要用到这个数据集,声明一个全局变量,可以直接用这个返回值.但是在捕获错误方面受到了限制,因为有返回值的函数每一个节点都要有返回值,想直接得到反馈是不行的,想在方法执行后写结果反馈的代码是检测不到的. 只能向师傅求救,给我提供了两种方法解决,感觉很巧妙. 原来的代码: Form1中的代码: priva

JAVA 类中方法参数与返回值

无参无返回值的方法,用public void 方法名,来声明: 有参无返回值的方法,用public void 方法名,来声明: 有参有返回值的方法,用public int 方法名(int i,int n),来声明(int 是参数的数据类型指定,也可以是其它数据类型,例如:String.char.double.int). 实例: //定义类 public class Test{ //无参无返回值的方法 public void eat(){ System.out.println("我在吃饭.&quo

Java反射xml数据到类中

我们做自动化测试时,会遇到使用xml存储数据,但是这些数据可以封装成一个类,进行数据的传递.以下通过一个实际的例子,展示给大家,请欣赏. 第一步:xml存储将要使用的数据 第二步:读取xml文件的方法 第三步:xml数据文件的类 第四步:处理方法