java反射,ReflectUtils
public class ReflectUtils {
/**
* 通过构造函数实例化对象
* @param className 类的全路径名称
* @param parameterTypes 参数类型
* @param initargs 参数值
* @return
*/
@SuppressWarnings("rawtypes")
public static Object constructorNewInstance(String className,Class [] parameterTypes,Object[] initargs) {
try {
Constructor<?> constructor = (Constructor<?>) Class
.forName(className).getDeclaredConstructor(parameterTypes);
constructor.setAccessible(true);
return constructor.newInstance(initargs);
} catch (Exception ex) {
throw new RuntimeException();
}
}
/**
* 获取字段值
* @param propertyName 属性名
* @param object 实例对象
* @return 字段值
*/
public static Object getProperty(String propertyName, Object object) {
try {
PropertyDescriptor pd = new PropertyDescriptor(propertyName,object.getClass());
Method method = pd.getReadMethod();
return method.invoke(object);
} catch (Exception ex) {
throw new RuntimeException();
}
}
/**
* 通过BeanUtils工具包获取反射获取字段值,注意此值是以字符串形式存在的,它支持属性连缀操作:如,.对象.属性
* @param propertyName 属性名
* @param object 实例对象
* @return 字段值
*/
public static Object getBeanInfoProperty(String propertyName, Object object) {
try {
return BeanUtils.getProperty(object, propertyName);
} catch (Exception ex) {
throw new RuntimeException();
}
}
/**
* 通过BeanUtils工具包获取反射获取字段值,注意此值是以字符串形式存在的
* @param object 实例对象
* @param propertyName 属性名
* @param value 字段值
* @return
*/
public static void setBeanInfoProperty(Object object,String propertyName,String value) {
try {
BeanUtils.setProperty(object, propertyName,value);
} catch (Exception ex) {
throw new RuntimeException();
}
}
/**
* 通过BeanUtils工具包获取反射获取字段值,注意此值是以对象属性的实际类型
* @param propertyName 属性名
* @param object 实例对象
* @return 字段值
*/
public static Object getPropertyUtilByName(String propertyName, Object object) {
try {
return PropertyUtils.getProperty(object, propertyName);
} catch (Exception ex) {
throw new RuntimeException();
}
}
/**
* 通过BeanUtils工具包获取反射获取字段值,注意此值是以对象属性的实际类型,这是PropertyUtils与BeanUtils的根本区别
* @param object 实例对象
* @param propertyName 属性名
* @param value 字段值
* @return
*/
public static void setPropertyUtilByName(Object object,String propertyName,Object value) {
try {
PropertyUtils.setProperty(object, propertyName,value);
} catch (Exception ex) {
throw new RuntimeException();
}
}
/**
* 设置字段值
* @param obj 实例对象
* @param propertyName 属性名
* @param value 新的字段值
* @return
*/
public static void setProperties(Object object, String propertyName,Object value) throws IntrospectionException,
IllegalAccessException, InvocationTargetException {
PropertyDescriptor pd = new PropertyDescriptor(propertyName,object.getClass());
Method methodSet = pd.getWriteMethod();
methodSet.invoke(object,value);
}
/**
* 设置字段值
* @param className 类的全路径名称
* @param methodName 调用方法名
* @param parameterTypes 参数类型
* @param values 参数值
* @param object 实例对象
* @return
*/
@SuppressWarnings("rawtypes")
public static Object methodInvoke(String className,String methodName,Class [] parameterTypes,Object [] values,Object object) {
try {
Method method = Class.forName(className).getDeclaredMethod(methodName,parameterTypes);
method.setAccessible(true);
return method.invoke(object,values);
} catch (Exception ex) {
throw new RuntimeException();
}
}
/**
* @param <T> 具体对象
* @param fileds 要进行比较Bean对象的属性值集合(以属性值为key,属性注释为value,集合从数据库中取出)
* @param oldBean 源对象
* @param newBean 新对象
* @return 返回二个Bean对象属性值的异同
*/
@SuppressWarnings("unused")
public static <T> String compareBeanValue(Map<String,String> fileds,T oldBean,T newBean){
StringBuilder compares = new StringBuilder();
String propertyName = null;
Object oldPropertyValue = null;
Object newPropertyValue = null;
StringBuilder descrips = new StringBuilder();
for(Map.Entry<String, String> entity : fileds.entrySet()){
propertyName = entity.getKey().toLowerCase();
oldPropertyValue = getProperty(propertyName, oldBean);
newPropertyValue = getProperty(propertyName, newBean);
if(null == oldPropertyValue && null == newPropertyValue){
continue;
}
if("".equals(oldPropertyValue) && "".equals(newPropertyValue)){
continue;
}
if(null == oldPropertyValue){
oldPropertyValue = "";
}
if(null == newPropertyValue){
newPropertyValue = "";
}
if(oldPropertyValue.equals(newPropertyValue)){
continue;
}
compares.append("字段注释: ").append(entity.getValue()).append("】").append("原属性值\"");
if(StringUtils.isEmpty(oldPropertyValue+"")){
oldPropertyValue = " ";
}
compares.append(oldPropertyValue).append("\"现属性值\"");
if(StringUtils.isEmpty(newPropertyValue+"")){
newPropertyValue = " ";
}
compares.append(newPropertyValue).append("\";");
}
return compares.toString();
}
/***
* 暴力反射获取字段值
* @param obj 实例对象
* @param fieldName 属性名
* @return 属性值
*/
public static Object getFieldValue(Object obj, String fieldName){
if(obj == null){
return null ;
}
Field targetField = getTargetField(obj.getClass(), fieldName);
try {
return FieldUtils.readField(targetField, obj, true ) ;
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null ;
}
public static Field getTargetField(Class<?> targetClass, String fieldName) {
Field field = null;
try {
if (targetClass == null) {
return field;
}
if (Object.class.equals(targetClass)) {
return field;
}
field = FieldUtils.getDeclaredField(targetClass, fieldName, true);
if (field == null) {
field = getTargetField(targetClass.getSuperclass(), fieldName);
}
} catch (Exception e) {
}
return field;
}
/**
* 设置字段值
* @param propertyName 字段名
* @param obj 实例对象
* @param value 新的字段值
* @return
*/
public static void setFieldValue(Object obj , String fieldName , Object value ){
if(null == obj){return;}
Field targetField = getTargetField(obj.getClass(), fieldName);
try {
FieldUtils.writeField(targetField, obj, value) ;
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
java反射,ReflectUtils的更多相关文章
- Java 反射 设计模式 动态代理机制详解 [ 转载 ]
Java 反射 设计模式 动态代理机制详解 [ 转载 ] @author 亦山 原文链接:http://blog.csdn.net/luanlouis/article/details/24589193 ...
- Java反射及其在Android中的应用学习总结
一. Java反射机制 Reflection 是Java被视为动态(或准动态)语言的一个关键性质.这个机制同意程序在执行时透过Reflection APIs取得不论什么一个已知名称的class的内部信 ...
- 利用java反射将结果集封装成为对象和对象集合
java反射机制是什么 反射机制是在运行状态中,可以知道任何一个类的属性和方法,并且调用类的属性和方法: 反射机制能够做什么 1.判断运行对象的所属类 2.构造任意一个类的对象 3.获取任意一个类的属 ...
- 第28章 java反射机制
java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...
- Java反射机制
Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射: 静态编译:在编译时确定类型,绑定对象,即通过 ...
- java反射(基础了解)
package cn.itcast_01; /** *Person类 */ public class Person { /** 姓名 */ private String name; ...
- java基础知识(十一)java反射机制(上)
java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...
- java基础知识(十一)java反射机制(下)
1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...
- java反射学习之二万能EXCEL导出
一.EXCEL导出的实现过程 假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性:那么我们实现的方式是这样的: 循环这个集合,在循环集合中某个对象的所有属性,将这个对 ...
- java反射学习之一反射机制概述
一.反射机制背景概述 1.反射(reflection)是java被视为动态语言的一个关键性质 2.反射机制指的是程序在运行时能获取任何类的内部所有信息 二.反射机制实现功能概述 1.只要给定类的全名, ...
随机推荐
- maven web 项目中启动报错java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener
环境:Groovy/Grails Tool Suite 3.1.0.RELEASE(BASED ON ECLIPSE JUNO 3.8.1).JDK1.6.Maven3.05.Tomcat6 错误描述 ...
- Spark RDD
对RDD的学习进行一下整理 RDD:基于内存的集群计算容错抽象 分布式内存抽象的概念---弹性分布式数据集(RDD),它具备MapReduce等数据流模型的容错特性,并且允许开发人员在大型集群上执行基 ...
- ✡ leetcode 174. Dungeon Game 地牢游戏 --------- java
The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a dungeon. ...
- UVA 1395 (kruskal)
/* 最大路与最小路的问题: 这道题看似简单,但是若不知道思路将无法写出. 思路:最小生成树很容易求出,但是最大值与最小值只差很难保证是最小的, 比如:1 5 5 6 100 101 很明显101 - ...
- Digital root(数根)
关于digital root可以参考维基百科,这里给出基本定义和性质. 一.定义 数字根(Digital Root)就是把一个数的各位数字相加,再将所得数的各位数字相加,直到所得数为一位数字为止.而这 ...
- NewQuant正式在Github发布
Github上的NewQuant https://github.com/xuruilong100/NewQuant NewQuant简介: NewQuant是一个小型开源C++库,可以解决数据分析.金 ...
- 开始使用Pyhton
安装 第一个Python程序 首先我们打开python 交互式解释器, 执行如下命令: Python 3.5.1+ (default, Mar 30 2016, 22:46:26) [GCC 5.3. ...
- spring加载bean实例化顺序
问题来源: 有一个bean为 A,一个bean为B.想要A在容器实例化的时候的一个属性name赋值为B的一个方法funB的返回值. 如果只是在A里单纯的写着: private B b;private ...
- select for update行锁
select for update行锁 2008-05-26 15:15:37 分类: Oracle Select-For Update语句的语法与select语句相同,只是在select语句的后面 ...
- Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例
目录 [TOC] 1.环境准备 本文中的案例会有四台机器,他们的Host和IP地址如下 c1 -> 10.0.0.31 c2 -> 10.0.0.32 c3 -> 10.0.0. ...