`

反射bean操作

 
阅读更多

package org.kjcx.entity;

import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Vector;

/**
 * 
 * @author LiuQing
 * @param <T>
 * @since
 * @version 1.0
 * @see 2011-10-3
 */
public class TestMangs<T> {
	
	private T disObj;

	/**
	 * @param args
	 * @throws Exception 
	 * @throws SecurityException 
	 */
	public static void main(String[] args) throws SecurityException, Exception {
		
		StudentInfo stu = new StudentInfo();
		Vector<CoreInfo> list = new Vector<CoreInfo>();
		
		CoreInfo coreInfo1 = new CoreInfo();
		coreInfo1.setId(1);
		coreInfo1.setComu(23.89d);
		coreInfo1.setCoreStr("HelloWorld");
		CoreInfo coreInfo2 = new CoreInfo();
		coreInfo2.setId(2);
		coreInfo2.setComu(34.90d);
		coreInfo2.setCoreStr("xxx.....");
		CoreInfo coreInfo3 = new CoreInfo();
		coreInfo3.setId(4);
		coreInfo3.setComu(24.90d);
		coreInfo3.setCoreStr("xxx..---...");
		list.add(coreInfo1);
		list.add(coreInfo2);
		list.add(coreInfo3);
		
		TestMangs<StudentInfo> sf = new TestMangs<StudentInfo>();
		sf.setDisObj(stu);
		sf.setMethodValue("id", 1000035);
		sf.setMethodValue("name", "LiuQing");
		sf.setMethodValue("msbsss", list.toArray());
		list.add(new CoreInfo());
		sf.setMethodValue("coreInfoes", list);

	}
	
	/**
	 * 
	 * @param fieldName
	 * @param isBoolean
	 * @return Class<?>
	 * @throws NoSuchMethodException
	 */
	public Class<?> getMethodReturnType(String fieldName,boolean isBoolean) throws NoSuchMethodException {
		
		return this.disObj.getClass()
		.getMethod(isBoolean? "is":"get" + this.firstToUpper(fieldName), null)
		.getReturnType();
	}
	
	/**
	 * 
	 * @param fieldName
	 * @param value
	 * @throws NoSuchMethodException
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws InvocationTargetException
	 */
	public void setMethodBooleanValue(String fieldName,Object value) throws NoSuchMethodException, 
	    IllegalArgumentException, IllegalAccessException, InvocationTargetException {
		
		Class<?> returnType = this.getMethodReturnType(fieldName,true);
		Method setMethod = this.disObj.getClass()
		.getMethod("set" + this.firstToUpper(fieldName),returnType);
		
		if (!returnType.isArray()) {
			setMethod.invoke(disObj, value);
		}
		else {
			Class<?> szElementType = returnType.getComponentType();
			Object arrayValue[] = (Object[]) value;
			Object obj = Array.newInstance(szElementType, arrayValue.length);
			System.arraycopy(value, 0, obj,0,arrayValue.length);
			setMethod.invoke(this.disObj, obj);
		}
	}
	
	/**
	 * 
	 * @param fieldName
	 * @param value
	 * @throws NoSuchMethodException
	 * @throws IllegalArgumentException
	 * @throws IllegalAccessException
	 * @throws InvocationTargetException
	 */
	public void setMethodValue(String fieldName,Object value) throws NoSuchMethodException, 
	    IllegalArgumentException, IllegalAccessException, InvocationTargetException {
		
		Class<?> returnType = this.getMethodReturnType(fieldName,false);
		Method setMethod = this.disObj.getClass()
		.getMethod("set" + this.firstToUpper(fieldName),returnType);
		
		if (!returnType.isArray()) {
			setMethod.invoke(disObj, value);
		}
		else {
			Class<?> szElementType = returnType.getComponentType();
			Object arrayValue[] = (Object[]) value;
			Object obj = Array.newInstance(szElementType, arrayValue.length);
			System.arraycopy(value, 0, obj,0,arrayValue.length);
			setMethod.invoke(this.disObj, obj);
		}
	}
	
	/**
	 * 
	 * @param fieldName
	 * @return String
	 */
	public String firstToUpper(String fieldName) {
		
		if (fieldName == null) {
			throw new NullPointerException();
		}
		
		char[] ch = fieldName.toCharArray();
		if (ch[0] >= 'a' && ch[0] <= 'z') {
			ch[0] = (char)(ch[0] - 32);
		}
		return new String(ch);
	}
	
	/**
	 * 
	 * @param fieldName
	 * @return String
	 */
	public String firstToLower(String fieldName) {
		
		if (fieldName == null) {
			throw new NullPointerException();
		}
		
		char[] ch = fieldName.toCharArray();
		if (ch[0] >= 'A' && ch[0] <= 'Z') {
			ch[0] = (char)(ch[0] + 32);
		}
		return new String(ch);
	}

	public T getDisObj() {
		return disObj;
	}

	public void setDisObj(T disObj) {
		this.disObj = disObj;
	}
	
	

}
 
分享到:
评论

相关推荐

    java bean 反射,

    java通过反射,修改操作类......

    java反射以及复制一个bean的值到另一个bean中。

    在Java编程中,反射(Reflection)是一个强大的工具,它允许我们在运行时检查和操作类、接口、字段和方法。通过反射,我们可以动态地创建对象、访问私有成员、调用私有方法,甚至改变对象的行为。Java反射 API 主要...

    通过java反射实现map与bean之间互转

    在给定的标题“通过java反射实现map与bean之间互转”中,我们要探讨的是如何利用Java反射机制将Map对象转换为Java Bean对象,以及反过来,将Java Bean对象转换为Map对象。这个过程在数据处理和序列化中非常常见。 ...

    使用Annotation和反射实现Bean转SQL语句Demo

    通过这个简单的示例,我们可以看到,结合Java的注解和反射功能,可以轻松地实现Bean到SQL语句的转换,大大简化了数据操作的代码,提高了代码的可读性和可维护性。在大型项目中,这样的工具或框架如MyBatis、...

    dom4j+反射,面向对象方式的xml格式转换

    DOM4J是一个Java库,它提供了丰富的API来操作XML文档,而反射则是Java语言的一种特性,允许我们在运行时检查和修改类、接口、字段和方法。本文将深入探讨如何结合DOM4J和反射,以面向对象的方式进行XML格式的转换。 ...

    spring容器初始化bean和销毁bean之前进行一些操作的方法

    1. 实例化:Spring容器通过反射机制创建Bean实例。 2. 属性注入:容器使用setter方法或构造函数参数对Bean的属性进行注入。 3. 初始化:Bean实例完成属性注入后,会调用初始化方法,可以是`@PostConstruct`注解的...

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

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

    深度转换Bean<->Bean的Mapper

    在描述中提到的博文链接中,作者可能详细解释了如何使用BeanMapper进行转换操作。通常,这类库提供了一个简单的方法,如`map()`,接受源Bean和目标Bean类型作为参数,自动处理属性映射。例如: ```java MySource ...

    xml和bean 互相转换

    // 使用转换后的Bean进行业务操作 } catch (JAXBException e) { e.printStackTrace(); } } } ``` Bean到XML的转换相对简单,主要包括以下步骤: 1. **创建Bean实例并填充数据**:根据业务需求创建Bean并设置...

    一种面向对象的Java Bean查询方法的实现

    在Java开发中,尤其是在涉及数据库操作的应用场景下,传统的做法是直接在Java Bean中编写SQL语句来完成数据的增删改查等操作。然而,这种方法存在一些明显的不足之处:一方面,由于每个Java Bean都需要针对其对应的...

    spring bean life cycle

    1. **实例化**:Spring容器在遇到一个Bean定义时,会通过反射机制创建Bean实例。如果Bean定义中有`factory-method`属性,那么Spring会调用指定的方法来实例化Bean,而不是使用默认的构造器。 2. **属性注入**:实例...

    Java的反射机制深度解析

    Java的反射机制是Java语言提供的一种强大的工具,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制的核心在于Java中的`java.lang.Class`类,它代表了类加载器加载后的类的元数据,包含了类的结构信息...

    xmlbean API

    5. **性能优化**:XMLBean利用了Java的反射机制和内省(Introspection)来提高处理速度。虽然反射有时被认为会影响性能,但在XMLBean中,这种开销被精心设计的缓存机制所抵消,使其在大多数情况下能够提供良好的性能...

    使用dom4j将xml字符串转换成Bean对象

    首先,dom4j是一个强大的Java XML API,它提供了丰富的功能,如读取、写入、修改和操作XML文档。其核心概念是Element(元素)、Attribute(属性)和Document(文档)。通过这些对象,我们可以方便地处理XML文档的...

    Java反射操作(需要commons-beanutils-1.8.2.jar)

    Apache Commons BeanUtils库是Java中用于简化Bean操作的一个实用工具包,特别是在处理对象属性的设置和获取方面。在这个场景中,"commons-beanutils-1.8.2.jar" 是Apache Commons BeanUtils库的一个版本,它包含了...

    Map和Bean灵活转换工具类

    总结来说,`MapUtils`和`BeanUtils`是Java开发中处理数据转换的重要工具,它们极大地简化了Map与Bean之间的转换操作,提高了代码的可读性和可维护性。了解和熟练运用这些工具类,能够使我们的开发工作更加高效。在...

    最全面的java反射总结

    Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心在于`java.lang.Class`类以及相关的类和接口,如`java.lang.reflect`包下...

    Java反射 JavaBean对象自动生成插入,更新,删除,查询sql语句操作.docx

    "Java反射 JavaBean 对象自动生成插入、更新、删除、查询sql语句操作" Java反射JavaBean对象自动生成插入、更新、删除、查询sql语句操作是指通过Java反射机制,依据提供的表名、POJO类型、数据对象自动生成sql语句...

    为了高效地将Json对象转化成Java bean对象,传统上我们是在运行是利用反射来实现.zip

    总结来说,将JSON对象转化为Java Bean是Java开发中的常见操作,通常通过反射实现,但现代库如Jackson提供更高效的方法。在实际开发中,应根据项目需求选择合适的方法,兼顾易用性和性能。对于大型项目,考虑使用ORM...

    读取Bean类自动创建数据库

    这通常涉及到Java的反射机制和数据库操作技术。 首先,Java反射机制是Java语言提供的一种强大的功能,允许程序在运行时检查和修改自身的结构和行为。在本场景中,它被用来动态获取Bean类的属性(字段)和方法,这些...

Global site tag (gtag.js) - Google Analytics