Java 软件管理 读取类的属性及其字段,注解相关

package com.test.model;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

 
@Entity
@Table(name="user")
public class User implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -4670967630657562910L;
	
	public static int testId = 3;
	
	@Id
	@Column(name="id")
	private String id ;
	
	@Column(name="createDate")
	private Date createDate;
	
	@Column(name="user_name")
	private String userName;
	
	@Column(name="user_password")
	private String userPassword;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public Date getCreateDate() {
		return createDate;
	}

	public void setCreateDate(Date createDate) {
		this.createDate = createDate;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getUserPassword() {
		return userPassword;
	}

	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}
	 
}

测试类

package com.test.fn;

import java.beans.PropertyDescriptor;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

import javax.persistence.Column;
import javax.persistence.Table;

import org.apache.commons.beanutils.PropertyUtils;

 
import com.test.model.User;

public class UserRead {
	public static void main(String[] args) {
		UserRead.readClassInfo(User.class);
		UserRead.readFieldOfClassInfo(User.class);
		UserRead.setPropertyTest(User.class);
		UserRead.propertyTest(User.class);
		
		
		//
		
	}
	//读取类的属性
	public static void propertyTest(Class<?> clazz){
		System.out.println("/************************************************/");
		System.out.println("/**                                            **/");
		System.out.println("/**            开始  propertyTest测试                                         **/");
		System.out.println("/**                                            **/");
		System.out.println("/**                                            **/");
		System.out.println("/************************************************/");
		PropertyDescriptor[] properties = PropertyUtils.getPropertyDescriptors(clazz);
		String propertyName = null;
		Field f = null;
		String disPlayName = "";
		String name = "";
		Method readMethod = null;
		Method writeMethod = null;
		for (PropertyDescriptor p : properties) {
			 
				//获得此特性的编程名称
				propertyName = p.getName();
				try {
					f = clazz.getDeclaredField(propertyName);
					
					disPlayName = p.getDisplayName();
					name = p.getName();
					readMethod = p.getReadMethod();
					writeMethod = p.getWriteMethod();
					
					System.out.println("disPlayName="+disPlayName);
					System.out.println("name="+name);
					if(readMethod!=null){
						System.out.println("readMethod="+readMethod.getName());
					}
					if(writeMethod!=null){
						System.out.println("writeMethod="+writeMethod.getName());
					}
					
					
				} catch (SecurityException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (NoSuchFieldException e) {
					System.out.println("异常了");
					 System.out.println("		propertyName="+propertyName);
					e.printStackTrace();
				}
		}
				
	}
	public static void setPropertyTest(Class<?> clazz){
		try {
			Object obj = clazz.newInstance();
			PropertyUtils.setProperty(obj, "id", "9999999999");
			
			System.out.println("赋值后的结果id为:"+((User)obj).getId());
			
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/***
	 * 
	 * 读取某个类的有哪些字段
	 */
	public static void readFieldOfClassInfo(Class<?> clazz){
		Field[] fields = clazz.getDeclaredFields();
		 
		 
		Field field = null;
		String fieldName = "";
		Class<?> fieldClass = null;
		int modifier = 0;
		boolean isColumnPresent = false;
		Annotation annotation = null;
		
		for (int i=0;i<fields.length;i++) {
			field = fields[i];
			
			fieldName = field.getName();
			fieldClass = field.getType();
			modifier = field.getModifiers();
			 
			
			if(Modifier.isPublic(modifier )){
				System.out.println("-----public");
			}else if(Modifier.isPrivate(modifier )){
				System.out.println("-----private");
			}
			if(Modifier.isStatic(modifier )){
				System.out.println("-----static");
			}
			System.out.println("-----字段类型"+fieldClass.getName());
			System.out.println("-----字段名称"+fieldName);
			System.out.println("-----修饰符:"+modifier);
			
			//判断字段有没有出现Column.class类的注解
			isColumnPresent = field.isAnnotationPresent(Column.class);
			if(isColumnPresent){
				//展示超类Annotation,此处有意为之
				/***
				 * Column c = field.getAnnotation(Column.class);
				 */
				annotation = field.getAnnotation(Column.class);
				Column c = (Column)annotation;
				System.out.println("column属性是:"+c.name());
			}
			
			System.out.println("      ");
			System.out.println("      ");
		}
	}
	
	/**
	 *读取class的相关注解 
	 **/
	public static void readClassInfo(Class<?> clazz){
		String className = clazz.getName();
		System.out.println("类名称是:"+className);
		Class<?> supserClass =clazz.getSuperclass();
		System.out.println("父类是:"+supserClass.getName());
		
		//判断类有没有出现某个注解
		if(clazz.isAnnotationPresent(Table.class)){
			 Table table = (Table) clazz.getAnnotation(Table.class);
			  String  tableName = table.name();
			  System.out.println("表名称是:"+tableName);
		} 
	}

}

猜你喜欢

转载自01jiangwei01.iteye.com/blog/1840648