18.3.2从Class上获取信息(注解)

package d18_3_1;
/**
 * Class类上所包含的注解
 *
 * getAnnotation(Class annotationClass) 获取该元素上指定的类型的注解
 * getAnnotations():返回此元素上存在的所有注解
 * getDeclaredAnnotations():返回直接存在于此元素上的所有注解
 */
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "user")
@XmlAccessorType(XmlAccessType.FIELD)
public class ClassInfo4 {

	private String pwd;

	@XmlElement(name = "ID")
	private int id;

	@XmlAttribute
	@XmlElement
	private String name;

	/**
	 * 1、获取属性上的指定类型的注解
	 * 2、获取属性上的指定类型的注解的指定方法
	 * 3、获取属性上的所有注解
	 * 4、获取类上的所有注解
	 * 5、获取方法上的所有注解
	 *
	 * @author 2014-11-10 下午02:18:24
	 * @param args
	 */
	@SuppressWarnings("rawtypes")
	public static void main(String[] args) {

		Field[] fields = ClassInfo4.class.getDeclaredFields();

		for (Field f : fields) {
			String filedName = f.getName();
			System.out.println("属性名称:【" + filedName + "】");
			// 1、获取属性上的指定类型的注解
			Annotation annotation = f.getAnnotation(XmlElement.class);

			// 有该类型的注解存在
			if (annotation != null) {
				// 强制转化为相应的注解
				XmlElement xmlElement = (XmlElement) annotation;
				// 3、获取属性上的指定类型的注解的指定方法
				// 具体是不是默认值可以去查看源代码
				if (xmlElement.name().equals("##default")) {
					System.out.println("属性【" + filedName + "】注解使用的name是默认值: "
							+ xmlElement.name());
				} else {
					System.out.println("属性【" + filedName + "】注解使用的name是自定义的值: "
							+ xmlElement.name());
				}
			}

			// 2、获取属性上的所有注解
			Annotation[] allAnnotations = f.getAnnotations();
			for (Annotation an : allAnnotations) {

				Class annotationType = an.annotationType();

				System.out.println("属性【" + filedName + "】的注解类型有: "
						+ annotationType);
			}
			System.out.println("----------华丽的分割线--------------");
		}

		// 4、获取类上的所有注解
		Annotation[] classAnnotation = ClassInfo4.class.getAnnotations();

		for (Annotation cAnnotation : classAnnotation) {
			Class annotationType = cAnnotation.annotationType();
			System.out.println("User类上的注解有: " + annotationType);
		}

		System.out.println("----------华丽的分割线--------------");

		// 5、获取方法上的所有注解
		Method method;
		try {
			method = ClassInfo4.class.getMethod("setPwd", String.class);

			Annotation[] methodAnnotations = method.getAnnotations();

			for (Annotation me : methodAnnotations) {
				Class annotationType = me.annotationType();
				System.out.println("setPwd方法上的注解类型有: " + annotationType);
			}
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		}
	}

	@XmlElement
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	public String getPwd() {
		return pwd;
	}
}

  

时间: 2024-08-01 13:02:13

18.3.2从Class上获取信息(注解)的相关文章

18.3.2从Class上获取信息(构造器)

获取构造器信息 package d18_3_1; import java.lang.reflect.Constructor; import java.util.Arrays; /** * 获取构造器的四个方法 * * 运行结果如下 * [private d18_3_1.Test2(), public d18_3_1.Test2(java.lang.String,int,java.lang.String), public d18_3_1.Test2(java.lang.String,int), p

18.3.2从Class上获取信息(方法)

package d18_3_1; import java.lang.reflect.Method; import java.util.Arrays; /** * 获取Class对应类所包含的方法的四个方法 * * 运行结果 * [public void d18_3_1.Test3.setAge(int), public int d18_3_1.Test3.getAge(), protected java.lang.String d18_3_1.Test3.getName(), private v

18.3.2从Class上获取信息(属性)

package d18_3_1; import java.lang.reflect.Field; import java.util.Arrays; /** * 获取Class对应类所包含的属性的四个方法 * * 运行结果 * [private java.lang.String d18_3_1.Test4.name, protected int d18_3_1.Test4.age, java.lang.String d18_3_1.Test4.sex, public java.lang.Strin

18.3.2从Class上获取信息(内部类接口等)

内部类 接口.枚举.注释类型

Android上获取设备的信息

http://www.cnblogs.com/chenyingzhong/archive/2011/07/26/2117259.html Android上获取设备的信息,布布扣,bubuko.com

获取指定类上的@RequestMapping注解的请求信息

通过上一篇博客,我们能够轻松的得到制定类上的制定注解.现在,我们尝试获取指定类上的@RequestMapping注解,并获取该控制层的全部请求信息.在这里,提供一个实体类,用于存放请求的部分信息. public class RequestUrlInfo implements Comparable<RequestUrlInfo>{ private String name; //mapping的名称 private String value; //mapping的请求路径 private Requ

java以及C#获取AD域上用户信息

JAVA /** *  JAVA 读取AD用户信息 *  aa00a00 */package com.wanda.sso.client.servlet; import java.util.Hashtable; import javax.naming.Context;import javax.naming.NamingEnumeration;import javax.naming.NamingException;import javax.naming.directory.Attribute;imp

c#从Web Service 获取信息并解析json

如果需要登录,使用下边方法,如果为匿名登录的,可以省略,在全局变量中定义public static string Cookiemsg,方便重复使用cookie. 1 public static CookieMsg GetCookieMessage(string name, string password) 2 { 3 CookieMsg cookieMsg = null; 4 string retString = ""; 5 try 6 { 7 HttpWebRequest reque

Android:解决客户端从服务器上获取数据乱码的方法

向服务器发送HTTP请求,接收到的JSON包为response,用String content = EntityUtils.toString(response.getEntity(),"utf-8");解码还是出现了中文乱码,在后面加了 String name = new String(response.getBytes("iso-8859-1"), "UTF-8"); 也无济于事.想到服务器好像是用URLENCODER编了码的,怀着试一试的态度