package com.ming.util; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import javax.websocket.Session; /** * Bean处理工具类 * @author Ming */ public class BeanUtils { /** * 获取一个Bean实例 * @param className * @return */ public static Object getBean(String className) { try { Class<?> c = Class.forName(className); Object o = c.newInstance(); return o; } catch (Exception e) { e.printStackTrace(); } return null; } /** * 执行某对象方法 * * @param owner * 对象 * @param methodName * 方法名 * @param args * 参数 * @return 方法返回值 * @throws Exception */ public static Object invokeMethod(Object owner, String methodName, Session session, String message) throws Exception { Class<? extends Object> ownerClass = owner.getClass(); Class<? extends Object>[] argsClass = new Class<?>[2]; argsClass[0] = Session.class; argsClass[1] = String.class; Method method = ownerClass.getMethod(methodName, argsClass); return method.invoke(owner,new Object[]{session,message}); } /** * 执行某对象方法 * * @param owner * 对象 * @param methodName * 方法名 * @param args * 参数 * @return 方法返回值 * @throws Exception */ public static Object invokeMethod(Object owner, String methodName, Object[] objects) throws Exception { Class<? extends Object> ownerClass = owner.getClass(); Class<? extends Object>[] argsClass = new Class<?>[objects.length]; for (int i = 0; i < objects.length; i++) { argsClass[i] = objects[i].getClass(); } Method method = ownerClass.getMethod(methodName, argsClass); return method.invoke(owner,objects); } /** * 执行某类的静态方法 * * @param className * 类名 * @param methodName * 方法名 * @param args * 参数数组 * @return 执行方法返回的结果 * @throws Exception */ @SuppressWarnings("rawtypes") public static Object invokeStaticMethod(String className, String methodName, Object[] args) throws Exception { Class<?> ownerClass = Class.forName(className); Class[] argsClass = new Class[args.length]; for (int i = 0, j = args.length; i < j; i++) { argsClass[i] = args[i].getClass(); } Method method = ownerClass.getMethod(methodName, argsClass); return method.invoke(null, args); } /** * 反射,根据当前传入对象实例,属性名,返回执行后的值 * * @param obj * @param fieldName * @return * @throws Exception */ public static Object getProperty(Object obj, String fieldName) { if (obj == null || fieldName == null) { return null; } String m = fieldName.substring(0, 1).toUpperCase(); String []splits = fieldName.split(","); String objectName,propertyName; if(splits.length>1){ String objname = splits[0]; //二级对象名字 String propname = splits[1]; //二级对象的属性名字 objectName = "get"+objname; propertyName = "get"+propname; try { try { Object oo = obj.getClass().getMethod(objectName, new Class[0]).invoke(obj); //获取二级对象 if (oo == null){ return null; } return oo.getClass().getMethod(propertyName, new Class[0]).invoke(oo); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } catch (SecurityException e2) { e2.printStackTrace(); } catch (NoSuchMethodException e2) { e2.printStackTrace(); } }else{ if(Character.isUpperCase(fieldName.charAt(1))==true){ m=m.toLowerCase(); } m = "get" + m + fieldName.substring(1, fieldName.length()); try { return obj.getClass().getMethod(m, new Class[0]).invoke(obj); } catch (Exception e) { m = fieldName.substring(0, 1).toUpperCase(); m = "is" + m + fieldName.substring(1, fieldName.length()); try { return obj.getClass().getMethod(m, new Class[0]).invoke(obj); } catch (Exception e1) { } } } return null; } /** * 反射,根据当前传入对象实例,属性名,设置值 * * @param obj * @param fieldName * @param val */ public static void setProperty(Object obj, String fieldName, Object val) { if (obj == null || fieldName == null) { return; } String m = fieldName.substring(0, 1).toUpperCase(); m = "set" + m + fieldName.substring(1, fieldName.length()); try { Method[] methods = getAllMethods(obj.getClass()); for (Method method : methods) { if (m.equals(method.getName())) { method.invoke(obj, val); break; } } } catch (Exception e) { } } /** * 递归查找所有的属性,包括父类的属性 * * @param object * @return */ public static Field[] getAllDeclaredFields(Class<?> cla) { if (cla != null && cla != Object.class) { Field[] fields = cla.getDeclaredFields(); Field[] resFields = fields; Field[] fields_ = getAllDeclaredFields(cla.getSuperclass()); if (fields_ != null) { resFields = new Field[fields.length + fields_.length]; System.arraycopy(fields, 0, resFields, 0, fields.length); System.arraycopy(fields_, 0, resFields, fields.length, fields_.length); } return resFields; } return null; } /** * 查找属性,包括父类的属性 * * @param object * @return */ public static Field getDeclaredFieldByName(Class<?> cla, String fieldName) { for(Field f : getAllDeclaredFields(cla)){ if(f.getName().equals(fieldName)) return f; } return null; } /** * 根据方法名获取方法 * @param cla * @param name * @return */ public static Method getMethod(Class<?> cla, String name){ for(Method m : getAllMethods(cla)){ if(m.getName().equals(name)){ return m; } } return null; } /** * 递归获取所有的方法 * @param cla * @return */ public static Method[] getAllMethods(Class<?> cla){ if (cla != null && cla != Object.class) { Method[] methods = cla.getDeclaredMethods(); Method[] resMethods = methods; Method[] methods_ = getAllMethods(cla.getSuperclass()); if (methods_ != null) { resMethods = new Method[methods.length + methods_.length]; System.arraycopy(methods, 0, resMethods, 0, methods.length); System.arraycopy(methods_, 0, resMethods, methods.length, methods_.length); } return resMethods; } return null; } }
相关推荐
common-beanutil的源代码 1.8.1
apache beanutil 1.7代码
Commons-beanutil中包括大量和JavaBean操作有关的工具方法,使用它能够轻松利用Java反射机制来完毕代码中所须要的功能,而不须要具体研究反射的原理和使用,同一时候,该类库中提出了动态Bean的概念,不但提供现有...
BeanUtil.java
commons-beanutils.jar.zip ,学习过程可能需要用到的jar包
BeanUtil属性拷贝工具类,支持基本的javabean属性拷贝,通过java反射和泛型编程实现了list属性拷贝
使用XLSTransformer生成XLS报表的jar包: jxls-core-0.9.7.jar jxls-reader-0.9.7.jar poi-3.6.jar commons-jexl-1.1.jar commons-digester-2.0.jar commons-beanutil-core-1.8.3.jar commons-collection.jar
json开发工具jar包必备commons-colloections-3.2.1.jar commons-logging-1.1.1.jar commons-beanutil.jar commons-httpclient.jar commons-lang.jar ezmorph-1.0.6.jar json-lib-2.4-jdk15.jar morph-1.1.1.jar
BeanUtil 主要用于实体Bean和Map之间的互转,使用方便,是一个不可多得的工具类哦
Commons-beanutil中包括大量和JavaBean操作有关的工具方法,使用它能够轻松利用Java反射机制来完毕代码中所须要的功能,而不须要具体研究反射的原理和使用,同一时候,该类库中提出了动态Bean的概念,不但提供现有...
里面包括要使用 json-lib 所要用到的所有包。另外还有 json-lib 的源码。可以在 eclipse 里查看源码。 commons-logging.jar commons-lang.jar commons-beanutil.jar commons-collections.jar ezmorph.jar
standard.jar msutil.jar mssqlserver.jar msbase.jar jstl.jar jspsmartupload.jar jsf-impl.jar jsf-api.jar classes.jar commons-digester.jar commons-collections.jar commons-beanutil.jar
Commons-beanutil中包含大量和JavaBean操作有关的工具方法,使用beanutils可轻松利用Java反射机制来完成所需功能,而不需要详细研究反射的原理和使用,同时beanutils类库中提出了动态Bean的概念,可在运行时动态对...
beanutil数据库操作工具,beanutil数据库操作工具
BeanUtil框架完整包
BeanUtil需要的jar包和源码文件,commons-beanutils-1.8.0.jar,commons-beanutils-1.8.0-javadoc.jar,commons-beanutils-1.8.0-sources.jar,commons-beanutils-bean-collections-1.8.0.jar,commons-beanutils-...
BEANutil工具类,可获取生日,简单的几行代码,给需要的你。BEANutil工具类,可获取生日,简单的几行代码,给需要的你。
修改了org.apache.commons.beanutils.converters包下的StringConverter类 3.ConvertUtilsBean类中的public void deregister()方法末尾下加入了register(java.util.Date.class, new UtilDateConverter());...