`
01jiangwei01
  • 浏览: 542999 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • 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);
		} 
	}

}

 

 

 

分享到:
评论

相关推荐

    Java自定义注解使用反射获取字段注解

    Java自定义注解是Java语言中的一个重要特性,它允许我们创建自己的元数据,为代码提供额外的信息。在Java中,注解(Annotation)主要用于编译器检查、代码生成、运行时处理等方面。本文将深入探讨如何通过反射机制来...

    自动读取mysql数据库字段并自动生成java属性和set和get方法

    为了提高开发效率,一种常见的解决方案是实现一个工具或框架,能够自动从数据库读取字段信息,并自动生成对应的Java代码。 这个工具或功能的核心思想是元数据映射(Metadata Mapping),它将数据库中的表结构映射到...

    java 通过反射获取类上注解,方法上注解,注解里的值及方法参数

    在Java编程中,注解(Annotation)是一种元数据,它提供了在代码中插入信息的方式,这些信息可以被编译器或运行时环境读取。反射(Reflection)是Java的一个强大特性,允许程序在运行时检查类、接口、字段和方法等...

    Java Bean 遍历和使用注解给Bean的属性添加属性值

    Java Bean遍历是获取并操作Bean对象属性的过程,而注解是现代Java中用于元数据的一种方式,可以给Bean的属性添加额外的信息或行为。 在给定的标题"Java Bean 遍历和使用注解给Bean的属性添加属性值"中,我们可以...

    Excel生成Java 带JPA注解的实体类

    在这个过程中,你可以创建一个Excel模板,定义每个字段的属性,如字段名、类型、长度等,然后使用POI读取这些信息,自动生成对应的Java类。 首先,我们需要在Java项目中引入Apache POI的依赖。在Maven工程中,可以...

    根据javabean动态获取字段以及中文名称

    javabean中有100个属性字段,想要在前端页面获取这100个字段和字段对应的中文名称,如用户名称(username),密码(password),可以动态的获取到中文名称和属性字段,并返回前端页面,本例只实现动态解析功能

    使用注解javaBean关联数据库字段

    在Java编程中,注解(Annotation)是一种元数据,它提供了在代码中嵌入信息的方式,这些信息可以被编译器、JVM或其他工具读取并处理。在JavaBean中使用注解,可以极大地简化对象与数据库之间的映射,使得数据访问...

    Excel导入导出,Java注解的方式实现

    通过在类的字段上使用注解,我们可以指定字段与Excel单元格之间的对应关系。例如,我们可以使用`@Cell`注解来标记字段,并通过参数指定单元格的编号或名称。 ```java public class User { @Cell(1) private ...

    mysql表映射成java实体类

    实体类通常包含属性(字段)和getter/setter方法,以及可能的JPA或Hibernate注解。例如,一个简单的模板可能如下: ```template public class ${tableName} { private ${columnName} ${fieldName}; // Getter & ...

    java注解实现通用Excel中文表格转实体对象列表,支持中文表头,Excel批量导入,excel转实体对象,excel读取

    java注解实现通用Excel中文表格转实体对象列表,支持中文表头,在Excel数据导入使用的...基于注解实现的支持中文表头的读取Excel数据并转换为实体对象列表的工具类,使用该工具类可将Excel数据转换成任意实体任意字段

    自定义JSONObject属性过滤注解

    这个注解有两个主要部分:`@Target(ElementType.FIELD)`表示该注解只能应用于字段,`@Retention(RetentionPolicy.RUNTIME)`意味着注解会在运行时保留,这样我们可以在序列化或反序列化过程中读取到它。 接下来,...

    java 序列化时排除指定属性

    在使用Jackson库(如`@JsonAutoDetect`、`@JsonIgnore`、`@JsonIgnoreProperties`注解)或Gson库(如`@Expose`、`@SerializedName`)进行JSON序列化时,也可以排除特定属性。 - **Jackson示例**: ```java @...

    java读取metadata元信息

    在Java编程中,元数据(Metadata)是指关于数据的数据,它提供有关文件、数据库记录、类、方法等的附加信息,但不直接构成这些实体的实际内容。元数据可以帮助理解和处理这些对象,例如,图片的元数据可能包含拍摄...

    java 自定义注解

    Java自定义注解是Java平台提供的一种元数据机制,它允许程序员在代码中添加额外的信息,这些信息可以被编译器、JVM或其他工具在编译时或运行时读取,用于实现各种功能,如代码生成、代码分析、依赖注入等。...

    基于注解形式的Java操作excel表格

    基于注解的Java操作Excel是一种高效且简洁的方式,它允许开发者通过在代码中添加特定的注解来定义和执行Excel相关的操作。这种方式极大地简化了代码,提高了可读性和可维护性。 首先,我们要理解注解(Annotation)...

    注解+反射实现自定义验证工具,可实现业务校验,字段多种校验

    验证工具类需要能够读取到类上的注解信息,并根据这些信息执行相应的验证逻辑。具体来说,包括以下几个方面: - **枚举定义**:定义枚举`VerifyWay`,用于表示不同的验证策略,比如`GreaterThan`、`LessThan`、`...

    Spring java注解,元注解和自定义注解

    ### Spring Java注解、元注解与自定义注解详解 #### 一、Java注解简介 在深入了解Spring框架中的注解应用之前,我们首先需要对Java注解有一个基本的认识。Java注解(Annotation)是一种元数据,可以为程序代码添加...

    java通用注解API

    本文将深入探讨Java注解的API及其使用。 1. **注解的基本概念** - 注解(Annotation)是Java SE 5.0引入的新特性,它是一种用于向编译器或JVM提供元数据的方式。 - 注解通过`@`符号后跟注解类型的名称来应用,如`...

    Java 注解技术视频详解

    Java注解技术是Java平台中一个非常重要的特性,它为元数据提供了强大的支持,使得开发者能够在代码中嵌入额外的信息,这些信息可以被编译器、JVM或第三方工具读取和处理。在本视频教程中,我们将深入探讨Java注解的...

    用注解的方式实现数据库类

    在数据库类的上下文中,我们通常使用ORM框架的特定注解来定义类和字段的数据库属性。例如,如果我们使用Hibernate,我们可以使用以下注解: 1. `@Entity`: 这个注解标记一个Java类为实体类,表示它将对应数据库中的...

Global site tag (gtag.js) - Google Analytics