- 浏览: 7339287 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
package easyway.tbs.client.bm.util;
import java.beans.Introspector;
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.HashSet;
import java.util.Set;
import java.util.logging.Logger;
import org.apache.commons.lang.ArrayUtils;
/**
* Relection 反射的工具类
* @author longgangbai
*
*/
public abstract class ClassUtils
{
private static Logger logger=Logger.getLogger(ClassUtils.class.getName());
public ClassUtils()
{
}
/**
* 通过类加载机制返回类对象
* @param name
* @param classLoader
* @return
* @throws ClassNotFoundException
*/
@SuppressWarnings("unchecked")
public static Class forName(String name, ClassLoader classLoader)
throws ClassNotFoundException
{
Class clazz = resolvePrimitiveClassName(name);
if(clazz != null)
return clazz;
if(name.endsWith("[]"))
{
String elementClassName = name.substring(0, name.length() - "[]".length());
Class elementClass = forName(elementClassName, classLoader);
return Array.newInstance(elementClass, 0).getClass();
} else
{
return Class.forName(name, true, classLoader);
}
}
/**
* 解析原始数据类型
* @param name
* @return
*/
@SuppressWarnings("unchecked")
public static Class resolvePrimitiveClassName(String name)
{
if(name.length() <= 8)
{
for(int i = 0; i < PRIMITIVE_CLASSES.length; i++)
{
Class clazz = PRIMITIVE_CLASSES[i];
if(clazz.getName().equals(name))
return clazz;
}
}
return null;
}
/**
*
* @param clazz
* @return
*/
@SuppressWarnings("unchecked")
public static String getShortNameAsProperty(Class clazz)
{
return Introspector.decapitalize(getShortName(clazz));
}
public static String getShortNameForField(Field field)
{
return Introspector.decapitalize(field.getName());
}
/**
* 获取方法的名称
* @param method
* @return
*/
public static String getShortNameForMethod(Method method)
{
String name = method.getName();
if(name.startsWith("is"))
name = name.substring("is".length());
else
if(name.startsWith("get"))
name = name.substring("get".length());
else
throw new IllegalArgumentException((new StringBuilder()).append("Method [").append(method.getName()).append("] is not formed as a JavaBean property").toString());
return Introspector.decapitalize(name);
}
/**
* 获取一个类的ShortName 如:com.easyway.A 返回 A
* @param clazz
* @return
*/
@SuppressWarnings("unchecked")
public static String getShortName(Class clazz)
{
return getShortName(clazz.getName());
}
/**
* 判断一个类是否为内部类并获取一个类的ShortName
* @param className
* @return
*/
public static String getShortName(String className)
{
int lastDotIndex = className.lastIndexOf('.');
int nameEndIndex = className.indexOf("$$");
if(nameEndIndex == -1)
nameEndIndex = className.length();
String shortName = className.substring(lastDotIndex + 1, nameEndIndex);
shortName = shortName.replace('$', '.');
return shortName;
}
/**
* 获取一个方法所在类的全名
* @param method 方法名称
* @return
*/
public static String getQualifiedMethodName(Method method)
{
return (new StringBuilder()).append(method.getDeclaringClass().getName()).append(".").append(method.getName()).toString();
}
/**
* 根据类,方法名称和参数查找方法
* @param clazz 类名
* @param methodName 方法名称
* @param paramTypes 参数类型
* @return
*/
@SuppressWarnings("unchecked")
public static boolean hasMethod(Class clazz, String methodName, Class paramTypes[])
{
try
{
clazz.getMethod(methodName, paramTypes);
return true;
}
catch(NoSuchMethodException ex)
{
return false;
}
}
/**
* 根据类和方法名返回方法的个数
* @param clazz
* @param methodName
* @return
*/
@SuppressWarnings("unchecked")
public static int getMethodCountForName(Class clazz, String methodName)
{
int count = 0;
do
{
for(int i = 0; i < clazz.getDeclaredMethods().length; i++)
{
Method method = clazz.getDeclaredMethods()[i];
if(methodName.equals(method.getName()))
count++;
}
clazz = clazz.getSuperclass();
} while(clazz != null);
return count;
}
/**
*
* @param clazz
* @param methodName
* @return
*/
@SuppressWarnings("unchecked")
public static boolean hasAtLeastOneMethodWithName(Class clazz, String methodName)
{
do
{
for(int i = 0; i < clazz.getDeclaredMethods().length; i++)
{
Method method = clazz.getDeclaredMethods()[i];
if(methodName.equals(method.getName()))
return true;
}
clazz = clazz.getSuperclass();
} while(clazz != null);
return false;
}
/**
* 获取静态的方法的
* @param clazz
* @param methodName
* @param args
* @return
*/
@SuppressWarnings("unchecked")
public static Method getStaticMethod(Class clazz, String methodName, Class args[])
{
try
{
Method method = clazz.getDeclaredMethod(methodName, args);
if((method.getModifiers() & Modifier.STATIC) != 0)
return method;
}
catch(NoSuchMethodException ex) { }
return null;
}
@SuppressWarnings("unchecked")
public static String addResourcePathToPackagePath(Class clazz, String resourceName)
{
if(!resourceName.startsWith("/"))
return (new StringBuilder()).append(classPackageAsResourcePath(clazz)).append("/").append(resourceName).toString();
else
return (new StringBuilder()).append(classPackageAsResourcePath(clazz)).append(resourceName).toString();
}
@SuppressWarnings("unchecked")
public static String classPackageAsResourcePath(Class clazz)
{
if(clazz == null || clazz.getPackage() == null)
return "";
else
return clazz.getPackage().getName().replace('.', '/');
}
/**
* 根据对象获取所有的接口
* @param object
* @return
*/
@SuppressWarnings("unchecked")
public static Class[] getAllInterfaces(Object object)
{
Set interfaces = getAllInterfacesAsSet(object);
return (Class[])(Class[])interfaces.toArray(new Class[interfaces.size()]);
}
/**
* 根据类获取所有的接口
* @param clazz
* @return
*/
@SuppressWarnings("unchecked")
public static Class[] getAllInterfacesForClass(Class clazz)
{
Set interfaces = getAllInterfacesForClassAsSet(clazz);
return (Class[])(Class[])interfaces.toArray(new Class[interfaces.size()]);
}
/**
* 根据对象获取所有的接口
* @param object
* @return
*/
@SuppressWarnings("unchecked")
public static Set getAllInterfacesAsSet(Object object)
{
return getAllInterfacesForClassAsSet(object.getClass());
}
/**
* 根据类获取所有的接口
* @param clazz
* @return
*/
@SuppressWarnings("unchecked")
public static Set getAllInterfacesForClassAsSet(Class clazz)
{
Set interfaces = new HashSet();
for(; clazz != null; clazz = clazz.getSuperclass())
{
for(int i = 0; i < clazz.getInterfaces().length; i++)
{
Class ifc = clazz.getInterfaces()[i];
interfaces.add(ifc);
}
}
return interfaces;
}
/**
* 检测一个方法或者一个属性是否为Public 修饰
* @param object
* @return
*/
@SuppressWarnings("unchecked")
public static boolean isPublic(Class clazz, Member member)
{
return Modifier.isPublic(member.getModifiers()) && Modifier.isPublic(clazz.getModifiers());
}
/**
* 检测一个Class是否为Abstract 修饰
* @param object
* @return
*/
@SuppressWarnings("unchecked")
public static boolean isAbstractClass(Class clazz)
{
int modifier = clazz.getModifiers();
return Modifier.isAbstract(modifier) || Modifier.isInterface(modifier);
}
/**
* 根据一个类获取一个默认的无参数的构造函数
* @param object
* @return
*/
@SuppressWarnings("unchecked")
public static Constructor getDefaultConstructor(Class clazz)
{
if(isAbstractClass(clazz))
return null;
try
{
Constructor constructor = clazz.getDeclaredConstructor(EMPTY_CLASS_ARRAY);
if(!isPublic(clazz, constructor))
constructor.setAccessible(true);
return constructor;
}
catch(NoSuchMethodException nme)
{
return null;
}
}
/**
* 根据一个类和对应输入参数,获取一个对应参数的构造函数
* @param object
* @return
*/
@SuppressWarnings("unchecked")
public static Constructor getConstructor(Class clazz,Class parameterTypes[])
{
if(isAbstractClass(clazz))
return null;
try
{
Constructor constructor = clazz.getConstructor(parameterTypes);
if(!isPublic(clazz, constructor))
constructor.setAccessible(true);
return constructor;
}
catch(NoSuchMethodException nme)
{
return null;
}
}
/**
* 将一个完整的类名装换为资源名称路径
* @param resourcePath
* @return
*/
public static String convertResourcePathToClassName(String resourcePath)
{
return resourcePath.replace('/', '.');
}
public static String convertClassNameToResourcePath(String className)
{
return className.replace('.', '/');
}
/**
* 获取一个对象的属性
* @param <T>
* @param object
* @param propertyName
* @return
* @throws NoSuchFieldException
*/
@SuppressWarnings("unchecked")
public static <T> T getDeclaredFieldValue(Object object, String propertyName)
throws NoSuchFieldException {
Field field = getDeclaredField(object.getClass(), propertyName);
boolean accessible = field.isAccessible();
Object result = null;
synchronized (field) {
field.setAccessible(true);
try {
result = field.get(object);
} catch (IllegalAccessException e) {
throw new NoSuchFieldException("No such field: "
+ object.getClass() + '.' + propertyName);
} finally {
field.setAccessible(accessible);
}
}
return (T) result;
}
/**
* 查找对应类的属性字段
* @param clazz
* @param propertyName
* @return
* @throws NoSuchFieldException
*/
public static Field getDeclaredField(Class<?> clazz, String propertyName)
throws NoSuchFieldException {
for (Class<?> superClass = clazz; superClass != Object.class;
superClass = superClass.getSuperclass()) {
try {
return superClass.getDeclaredField(propertyName);
} catch (NoSuchFieldException e) {
// Field不在当前类定义,继续向上转型
e.printStackTrace();
}
}
throw new NoSuchFieldException("No such field: " + clazz.getName()
+ '.' + propertyName);
}
/**
* 获取一个类的所有的属性
* @param clazz
* @return
*/
public static Field[] getDeclaredFields(Class<?> clazz) {
Field[] fields = clazz.getDeclaredFields();
for (Class<?> superClass = clazz; superClass != Object.class; superClass = superClass
.getSuperclass()) {
fields = (Field[]) ArrayUtils.addAll(fields, superClass.getDeclaredFields());
}
return fields;
}
public static final String ARRAY_SUFFIX = "[]";
private static Class PRIMITIVE_CLASSES[];
private static final Class EMPTY_CLASS_ARRAY[] = new Class[0];
static
{
PRIMITIVE_CLASSES = (new Class[] {
Boolean.TYPE, Byte.TYPE, Character.TYPE, Short.TYPE, Integer.TYPE, Long.TYPE, Float.TYPE, Double.TYPE
});
}
}
发表评论
-
编程的十四条经验
2013-05-06 10:32 1821排列不分先后: 1. 当 ... -
整合Struts2+JasperReport Web报表应用示例
2013-04-22 13:56 2289整合Struts2+JasperReport Web报表应用 ... -
关于H2使用的那些事
2012-12-14 16:40 27221在项目中采用H2作为工 ... -
Java 分割功能实现
2011-08-25 08:39 2795在项目针对比较大的文件需要文件的分割功能,特意写了一个 ... -
项目中Hibernate中Criteria和Query查询和模式引用
2010-02-21 15:52 2455在项目中Hibernate中Criteria和Q ... -
json 在项目中开发一个巧妙地应用
2009-12-12 16:49 3905在项目中需要保存客户的信息到Cookie中,因为客户要求 ... -
项目中使用时间工具类
2009-11-21 16:43 3034项目中使用的时间工具类的主要的采用commons-l ... -
将HTML文件转换为图片应用开发
2009-10-21 11:15 4464项目使用的基 ... -
Spring项目的测试用例
2009-08-22 12:49 2331在项目的开发过程中使用Junit4测试代码,使用 ... -
jBPM与Spring整合浅析
2009-08-22 12:41 26641、创建公文流转相关的实体类,并创建数据库表 2、根据对用 ... -
Hibernate正向工程hbm2ddl
2009-08-19 10:14 2312一般在项目开 ... -
Hibernate中用户类型(User Type)应用
2009-08-16 09:08 3142在项目中许多地方使用枚举类,枚举对象值对应数据一个常 ... -
关于常用城市控件中数据的处理方案
2009-08-15 19:41 2419在项目中由于多次使用的国家省份城市的控件,以前采 ... -
在Spring2.5注解时必须注意几点
2009-08-15 19:22 2136项目中采用Spring2.5配置重点内容如下: ... -
中文转换拼音的实现思路以及实现
2009-08-15 18:40 2917在项目中一位大师兄写的中文转换拼音代码:自己整理一下 ... -
在项目中一些相关常量数组使用枚举应用
2009-08-15 18:01 2621在项目中采用Hibernate中支持枚举类型因此我们使用许 ... -
在项目开发中关于Hibernate注解的配置的一些说明
2009-08-15 13:26 4349在项目开发中采用Hibernate3注解方式实现关 ... -
关于项目中泛型的应用
2009-08-15 12:38 2399在项目采用JDK1.6采用泛型开发,在开发应用之中减少了大 ... -
针对项目中XML解析的扩展应用
2009-08-15 12:14 2580由于项目中多个需 ...
相关推荐
该工具类下载后拷贝到你要用的包,只需该包名即可
一个Java反射工具类,可以完成查询字段值以及设置字段值的功能。
java组件开发(13)反射工具类
java的泛型和反射机制一直很难理解和应用,这个程序是关于反射和泛型的综合使用,主要实现获取一个类的属性名和方法,并可以获取属性值,存取属性值,属性名和属性值的字符...只是个工具类,没有写测试类,自己测试下啊
java * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,java * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,java * 反射工具...
反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数.反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被...
提供以下几个功能: 1. 取最简类名 2. 动态赋值 3. 动态取值 4. 判断是否普通类型(自定义成员变量) 5. 动态取指定类的所有属性名
在IT行业中,MyBatis、Spring AOP、Spring事务管理和反射工具类是常见的技术栈,它们在构建高效、灵活的企业级应用中起着至关重要的作用。以下是对这些知识点的详细阐述: 1. MyBatis拦截器(MyBatis Interceptor)...
Xposed框架的核心是其提供的API,其中`XposedHelper`是一个关键的反射工具类,方便开发者对Android系统的类和方法进行操作。本文将详细介绍如何将`XposedHelper`移植到非Xposed环境中,以及在Java反射技术方面的一些...
进行数据库查询操作经常用到,包括getDeclaredField、getDeclaredMethod、getFieldValue、getSuperClassGenricType、getSuperGenericType、invokeMethod、makeAccessible、setFieldValue
这个"一键换肤,反射工具类"是实现这一功能的关键部分,通过反射技术来实现动态加载不同的主题资源,使得皮肤更换无需重启应用。 反射在Java(包括Android)编程中是一种强大的技术,它允许程序在运行时检查和修改...
ReflectUtil java反射工具类
Java项目开发用的公用基础模块,包括:Spring容器初始化、配置文件读取工具类、分页对象、Protobuf工具类、反射工具类等
ReflectionUtils :反射工具类,包括 --- 通过反射获取实体类中的字段及其中文注释 --- 通过字段名称获得对象中对应的值 --- 驼峰格式字符串转换为下划线格式字符串 ColumnExplain: 使用在实体类字段上,用于标注...
该代码经过作者的优化,可直接使用,反射一个实体,从试题中获取值
使用的cglib+缓存 1千万次空方法调用 大概3秒~ 直接反射的速度为10秒~ 缓存后反射为 6秒~ 取出安全验证缓存后的速度为 4秒左右~ 另外大概有2秒的性能消耗在字符串拼接缓存中的key造成~ 因此上面带缓存的反射方案...
java 反射工具类,适用于框架开发、平台建设等项目
这个“Java反射调用工具类”可能是为了简化和封装这些复杂的反射操作而创建的一个实用工具类。 首先,`JobProxy.java`可能是一个代理类,它利用反射来动态地调用目标对象的方法。在Java中,代理模式通常用于在不...