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; } }
相关推荐
这个"commons-beanutil-1.7.0-src"压缩包包含了BeanUtils库的源代码,版本号为1.7.0,是开发者理解和自定义此库功能的重要资源。以下是关于Apache Commons BeanUtils库及其1.7.0版本的一些关键知识点: 1. **...
Commons-beanutil中包括大量和JavaBean操作有关的工具方法,使用它能够轻松利用Java反射机制来完毕代码中所须要的功能,而不须要具体研究反射的原理和使用,同一时候,该类库中提出了动态Bean的概念,不但提供现有...
"Java反射 JavaBean 对象自动生成插入、更新、删除、查询sql语句操作" Java反射JavaBean对象自动生成插入、更新、删除、查询sql语句操作是指通过Java反射机制,依据提供的表名、POJO类型、数据对象自动生成sql语句...
4. **反射操作**:BeanUtils库利用Java反射API,使得开发者无需直接编写反射代码,就能执行基于属性名的方法调用。 5. **处理集合和数组**:对于Bean中包含集合或数组的属性,BeanUtils也提供了相应的处理方法,...
BeanUtil属性拷贝工具类,支持基本的javabean属性拷贝,通过java反射和泛型编程实现了list属性拷贝
《BeanUtil:Apache提供的高效Java反射工具包》 在Java编程中,BeanUtil是一个非常重要的工具包,尤其在处理对象的属性操作时,它扮演着不可或缺的角色。BeanUtil源自著名的开源组织Apache,是其 Commons BeanUtils...
BeanUtil是Apache Commons项目中的一个工具类库,主要用于处理Java Bean的操作,提供了一系列便捷的方法来简化Java Bean的属性操作。在这个"BeanUtil1.8 SRC 源码和 jar包"中,包含两个重要的文件:`commons-...
Commons-beanutil中包括大量和JavaBean操作有关的工具方法,使用它能够轻松利用Java反射机制来完毕代码中所须要的功能,而不须要具体研究反射的原理和使用,同一时候,该类库中提出了动态Bean的概念,不但提供现有...
在Java开发中,BeanUtil和Logging是两个非常重要的工具库,它们在许多项目中都扮演着核心角色。这里我们将深入探讨这两个概念以及它们在实际应用中的使用。 首先,BeanUtil通常指的是Apache Commons BeanUtils库,...
1. 反射:使用Java的反射API获取Bean的所有字段和它们的值。 2. SQL构建:根据字段生成SQL语句,注意处理NULL值和特殊类型(如日期)。 3. MyBatis整合:可能需要结合MyBatis的Mapper接口或XML配置,将生成的SQL语句...
总的来说,BeanUtil工具类是Java Web开发中的实用工具,它简化了Servlet处理表单数据和JavaBean之间数据转换的过程,让代码更简洁、更易于维护。在学习和使用BeanUtil时,还需要了解其潜在的类型转换问题和安全性...
总的来说,"beanutil源代码"和"fileupload"都是Java Web开发中的实用工具,前者简化了JavaBean对象的交互,后者则提供了强大的文件上传处理能力。将两者结合,可以高效地实现复杂的业务逻辑,如用户上传文件并保存...
它通过反射机制,实现了属性的自动赋值和获取,大大降低了代码的复杂性。例如,`CommonUtils`类中的`uuid生成随机数`可能利用了BeanUtils的特性,生成一个唯一的标识符,这个标识符在数据库操作或者对象识别中非常...
它通过反射机制将XML映射到Java对象,并能将Java对象序列化为XML。在XStream中,这个过程是通过定义一个或多个Java类(Bean)来完成的,这些类代表了XML文档的结构。当XML数据被解析时,XStream会创建或更新相应的...
一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,同时提供以下组件: 布隆过滤 缓存 克隆接口 类型转换 日期处理 数据库ORM(基于...
10. **其他工具**:除了以上核心功能,Jodd还包括了诸如缓存、反射、加密解密、异常处理、模式匹配等多种实用工具,全面覆盖了日常开发的各个方面。 Jodd的源码软件结构清晰,易于理解和扩展,对于想要深入学习Java...
4. **反射辅助**:通过BeanUtils,开发者可以利用反射机制,方便地处理未知类型的Bean。 5. **日志记录**:通过commons-logging,开发者可以方便地添加和调整日志系统,以便于调试和问题排查。 综上所述,...
本篇文章将介绍一种基于Java的基本JSON解析方法,通过提供的`JsonUtil.java`、`BeanUtil.java`和`AjaxResponse.java`三个文件,我们可以看到如何实现这一功能。 `JsonUtil.java`文件很可能是包含解析和序列化JSON的...
此外,Hutool的ClassUtil和BeanUtil简化了Java反射操作,方便了类的实例化和属性的设置与获取。而RegexUtil则提供了正则表达式的便利操作,使匹配和替换字符串变得更加简单。 总之,Hutool v3.2.0作为一个全面的...