spring的beanutils工具类_基于spring-beans实现工具类BeanUtils基于Class实例化注入对象及查找方法、复制属性等操作...

一、前言

基于spring-beans(4.1.4)的工具类org.springframework.beans.BeanUtils对注入spring对象按照Class实例化instantiateClass、class对象方法名称methodName查找findMethod、属性查找对于class类信息findPropertyType、对象属性复制copyProperties等常用操作,具体如下源码所示。

二、源码说明package org.springframework.beans;@b@@b@import java.beans.PropertyDescriptor;@b@import java.beans.PropertyEditor;@b@import java.lang.reflect.Constructor;@b@import java.lang.reflect.InvocationTargetException;@b@import java.lang.reflect.Method;@b@import java.lang.reflect.Modifier;@b@import java.net.URI;@b@import java.net.URL;@b@import java.util.Arrays;@b@import java.util.Collections;@b@import java.util.Date;@b@import java.util.List;@b@import java.util.Locale;@b@import java.util.Set;@b@import org.apache.commons.logging.Log;@b@import org.apache.commons.logging.LogFactory;@b@import org.springframework.core.MethodParameter;@b@import org.springframework.util.Assert;@b@import org.springframework.util.ClassUtils;@b@import org.springframework.util.ConcurrentReferenceHashMap;@b@import org.springframework.util.ReflectionUtils;@b@import org.springframework.util.StringUtils;@b@@b@public abstract class BeanUtils@b@{@b@  private static final Log logger = LogFactory.getLog(BeanUtils.class);@b@  private static final Set> unknownEditorTypes = Collections.newSetFromMap(new ConcurrentReferenceHashMap(64));@b@@b@  public static  T instantiate(Class clazz)@b@    throws BeanInstantiationException@b@  {@b@    Assert.notNull(clazz, "Class must not be null");@b@    if (clazz.isInterface())@b@      throw new BeanInstantiationException(clazz, "Specified class is an interface");@b@    try@b@    {@b@      return clazz.newInstance();@b@    }@b@    catch (InstantiationException ex) {@b@      throw new BeanInstantiationException(clazz, "Is it an abstract class?", ex);@b@    }@b@    catch (IllegalAccessException ex) {@b@      throw new BeanInstantiationException(clazz, "Is the constructor accessible?", ex);@b@    }@b@  }@b@@b@  public static  T instantiateClass(Class clazz)@b@    throws BeanInstantiationException@b@  {@b@    Assert.notNull(clazz, "Class must not be null");@b@    if (clazz.isInterface())@b@      throw new BeanInstantiationException(clazz, "Specified class is an interface");@b@    try@b@    {@b@      return instantiateClass(clazz.getDeclaredConstructor(new Class[0]), new Object[0]);@b@    }@b@    catch (NoSuchMethodException ex) {@b@      throw new BeanInstantiationException(clazz, "No default constructor found", ex);@b@    }@b@  }@b@@b@  public static  T instantiateClass(Class> clazz, Class assignableTo)@b@    throws BeanInstantiationException@b@  {@b@    Assert.isAssignable(assignableTo, clazz);@b@    return instantiateClass(clazz);@b@  }@b@@b@  public static  T instantiateClass(Constructor ctor, Object[] args)@b@    throws BeanInstantiationException@b@  {@b@    Assert.notNull(ctor, "Constructor must not be null");@b@    try {@b@      ReflectionUtils.makeAccessible(ctor);@b@      return ctor.newInstance(args);@b@    }@b@    catch (InstantiationException ex) {@b@      throw new BeanInstantiationException(ctor.getDeclaringClass(), "Is it an abstract class?", ex);@b@    }@b@    catch (IllegalAccessException ex)@b@    {@b@      throw new BeanInstantiationException(ctor.getDeclaringClass(), "Is the constructor accessible?", ex);@b@    }@b@    catch (IllegalArgumentException ex)@b@    {@b@      throw new BeanInstantiationException(ctor.getDeclaringClass(), "Illegal arguments for constructor", ex);@b@    }@b@    catch (InvocationTargetException ex)@b@    {@b@      throw new BeanInstantiationException(ctor.getDeclaringClass(), "Constructor threw exception", ex@b@        .getTargetException());@b@    }@b@  }@b@@b@  public static Method findMethod(Class> clazz, String methodName, Class>[] paramTypes)@b@  {@b@    try@b@    {@b@      return clazz.getMethod(methodName, paramTypes);@b@    } catch (NoSuchMethodException ex) {@b@    }@b@    return findDeclaredMethod(clazz, methodName, paramTypes);@b@  }@b@@b@  public static Method findDeclaredMethod(Class> clazz, String methodName, Class>[] paramTypes)@b@  {@b@    try@b@    {@b@      return clazz.getDeclaredMethod(methodName, paramTypes);@b@    }@b@    catch (NoSuchMethodException ex) {@b@      if (clazz.getSuperclass() != null)@b@        return findDeclaredMethod(clazz.getSuperclass(), methodName, paramTypes);@b@    }@b@    return null;@b@  }@b@@b@  public static Method findMethodWithMinimalParameters(Class> clazz, String methodName)@b@    throws IllegalArgumentException@b@  {@b@    Method targetMethod = findMethodWithMinimalParameters(clazz.getMethods(), methodName);@b@    if (targetMethod == null)@b@      targetMethod = findDeclaredMethodWithMinimalParameters(clazz, methodName);@b@@b@    return targetMethod;@b@  }@b@@b@  public static Method findDeclaredMethodWithMinimalParameters(Class> clazz, String methodName)@b@    throws IllegalArgumentException@b@  {@b@    Method targetMethod = findMethodWithMinimalParameters(clazz.getDeclaredMethods(), methodName);@b@    if ((targetMethod == null) && (clazz.getSuperclass() != null))@b@      targetMethod = findDeclaredMethodWithMinimalParameters(clazz.getSuperclass(), methodName);@b@@b@    return targetMethod;@b@  }@b@@b@  public static Method findMethodWithMinimalParameters(Method[] methods, String methodName)@b@    throws IllegalArgumentException@b@  {@b@    Method targetMethod = null;@b@    int numMethodsFoundWithCurrentMinimumArgs = 0;@b@    Method[] arrayOfMethod = methods; int i = arrayOfMethod.length; for (int j = 0; j  1) {@b@      throw new IllegalArgumentException("Cannot resolve method '" + methodName + "' to a unique method. Attempted to resolve to overloaded method with " + "the least number of parameters, but there were " + numMethodsFoundWithCurrentMinimumArgs + " candidates.");@b@    }@b@@b@    return targetMethod;@b@  }@b@@b@  public static Method resolveSignature(String signature, Class> clazz)@b@  {@b@    Assert.hasText(signature, "'signature' must not be empty");@b@    Assert.notNull(clazz, "Class must not be null");@b@    int firstParen = signature.indexOf("(");@b@    int lastParen = signature.indexOf(")");@b@    if ((firstParen > -1) && (lastParen == -1)) {@b@      throw new IllegalArgumentException("Invalid method signature '" + signature + "': expected closing ')' for args list");@b@    }@b@@b@    if ((lastParen > -1) && (firstParen == -1)) {@b@      throw new IllegalArgumentException("Invalid method signature '" + signature + "': expected opening '(' for args list");@b@    }@b@@b@    if ((firstParen == -1) && (lastParen == -1)) {@b@      return findMethodWithMinimalParameters(clazz, signature);@b@    }@b@@b@    String methodName = signature.substring(0, firstParen);@b@@b@    String[] parameterTypeNames = StringUtils.commaDelimitedListToStringArray(signature@b@      .substring(firstParen + 1, lastParen));@b@@b@    Class[] parameterTypes = new Class[parameterTypeNames.length];@b@    for (int i = 0; i  clazz)@b@    throws BeansException@b@  {@b@    CachedIntrospectionResults cr = CachedIntrospectionResults.forClass(clazz);@b@    return cr.getPropertyDescriptors();@b@  }@b@@b@  public static PropertyDescriptor getPropertyDescriptor(Class> clazz, String propertyName)@b@    throws BeansException@b@  {@b@    CachedIntrospectionResults cr = CachedIntrospectionResults.forClass(clazz);@b@    return cr.getPropertyDescriptor(propertyName);@b@  }@b@@b@  public static PropertyDescriptor findPropertyForMethod(Method method)@b@    throws BeansException@b@  {@b@    return findPropertyForMethod(method, method.getDeclaringClass());@b@  }@b@@b@  public static PropertyDescriptor findPropertyForMethod(Method method, Class> clazz)@b@    throws BeansException@b@  {@b@    Assert.notNull(method, "Method must not be null");@b@    PropertyDescriptor[] pds = getPropertyDescriptors(clazz);@b@    PropertyDescriptor[] arrayOfPropertyDescriptor1 = pds; int i = arrayOfPropertyDescriptor1.length; for (int j = 0; j  targetType)@b@  {@b@    if ((targetType == null) || (targetType.isArray()) || (unknownEditorTypes.contains(targetType)))@b@      return null;@b@@b@    ClassLoader cl = targetType.getClassLoader();@b@    if (cl == null)@b@      try {@b@        cl = ClassLoader.getSystemClassLoader();@b@        if (cl == null)@b@          return null;@b@@b@      }@b@      catch (Throwable ex)@b@      {@b@        if (logger.isDebugEnabled())@b@          logger.debug("Could not access system ClassLoader: " + ex);@b@@b@        return null;@b@      }@b@@b@    String editorName = targetType.getName() + "Editor";@b@    try {@b@      Class editorClass = cl.loadClass(editorName);@b@      if (!(PropertyEditor.class.isAssignableFrom(editorClass))) {@b@        if (logger.isWarnEnabled()) {@b@          logger.warn("Editor class [" + editorName + "] does not implement [java.beans.PropertyEditor] interface");@b@        }@b@@b@        unknownEditorTypes.add(targetType);@b@        return null;@b@      }@b@      return ((PropertyEditor)instantiateClass(editorClass));@b@    }@b@    catch (ClassNotFoundException ex) {@b@      if (logger.isDebugEnabled())@b@        logger.debug("No property editor [" + editorName + "] found for type " + targetType@b@          .getName() + " according to 'Editor' suffix convention");@b@@b@      unknownEditorTypes.add(targetType); }@b@    return null;@b@  }@b@@b@  public static Class> findPropertyType(String propertyName, Class>[] beanClasses)@b@  {@b@    Class[] arrayOfClass;@b@    int j;@b@    if (beanClasses != null) {@b@      arrayOfClass = beanClasses; int i = arrayOfClass.length; for (j = 0; j  clazz)@b@  {@b@    Assert.notNull(clazz, "Class must not be null");@b@    return ((isSimpleValueType(clazz)) || ((clazz.isArray()) && (isSimpleValueType(clazz.getComponentType()))));@b@  }@b@@b@  public static boolean isSimpleValueType(Class> clazz)@b@  {@b@    return ((ClassUtils.isPrimitiveOrWrapper(clazz)) || (clazz.isEnum()) || @b@      (CharSequence.class@b@      .isAssignableFrom(clazz)) || @b@      (Number.class@b@      .isAssignableFrom(clazz)) || @b@      (Date.class@b@      .isAssignableFrom(clazz)) || @b@      (clazz@b@      .equals(URI.class)) || @b@      (clazz.equals(URL.class)) || @b@      (clazz@b@      .equals(Locale.class)) || @b@      (clazz.equals(Class.class)));@b@  }@b@@b@  public static void copyProperties(Object source, Object target)@b@    throws BeansException@b@  {@b@    copyProperties(source, target, null, (String[])null);@b@  }@b@@b@  public static void copyProperties(Object source, Object target, Class> editable)@b@    throws BeansException@b@  {@b@    copyProperties(source, target, editable, (String[])null);@b@  }@b@@b@  public static void copyProperties(Object source, Object target, String[] ignoreProperties)@b@    throws BeansException@b@  {@b@    copyProperties(source, target, null, ignoreProperties);@b@  }@b@@b@  private static void copyProperties(Object source, Object target, Class> editable, String[] ignoreProperties)@b@    throws BeansException@b@  {@b@    Assert.notNull(source, "Source must not be null");@b@    Assert.notNull(target, "Target must not be null");@b@@b@    Class actualEditable = target.getClass();@b@    if (editable != null) {@b@      if (!(editable.isInstance(target)))@b@      {@b@        throw new IllegalArgumentException("Target class [" + target.getClass().getName() + "] not assignable to Editable class [" + editable@b@          .getName() + "]");@b@      }@b@      actualEditable = editable;@b@    }@b@    PropertyDescriptor[] targetPds = getPropertyDescriptors(actualEditable);@b@    List ignoreList = (ignoreProperties != null) ? Arrays.asList(ignoreProperties) : null;@b@@b@    PropertyDescriptor[] arrayOfPropertyDescriptor1 = targetPds; int i = arrayOfPropertyDescriptor1.length; for (int j = 0; j 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441201.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CodeForces - 260C】Balls and Boxes (思维模拟,有坑,时光倒流)

题干: Little Vasya had n boxes with balls in the room. The boxes stood in a row and were numbered with numbers from 1 to n from left to right. Once Vasya chose one of the boxes, lets assume that its number is i, took all balls out from it (it …

文件服务器共享文件夹访问权限,5对文件服务器中的共享文件夹进行访问权限控制...

对文件服务器中的共享文件夹进行访问权限控制1. 实训目的在Windows Server 2003环境下设置文件服务器的目的是要对多用户进行资源共享,这其中经常遇到不同用户应该分配不同权限的问题,通过这个实训希望读者了解Windows Server 2003中访问权限设置方法和具…

java生日正则表达式_java之正则表达式、日期操作

正则表达式和日期操作正则表达式简介正则表达式就是使用一系列预定义的特殊字符来描述一个字符串的格式规则,然后使用该格式规则匹配某个字符串是否符合格式要求。作用:比如注册邮箱,邮箱有用户名和密码,一般会对其限制长度,这个限制长度的事情就是正则表达式做的规…

渲染服务器位置,如何用服务器做渲染

如何用服务器做渲染 内容精选换一换����BoostKit ARMԭ��ʹ���׼������嵥�&#xfffd…

【HDU - 2376】Average distance (树,平均距离,算贡献)

题干: Given a tree, calculate the average distance between two vertices in the tree. For example, the average distance between two vertices in the following tree is (d 01 d 02 d 03 d 04 d 12 d 13 d 14 d 23 d 24 d 34)/10 (63799131510122)/10…

读取ppt并存入数据库_Java解析Excel文件并把数据存入数据库

前段时间做一个小项目,为了同时存储多条数据,其中有一个功能是解析Excel并把其中的数据存入对应数据库中。花了两天时间,不过一天多是因为用了"upload"关键字作为URL从而导致总报同一个错,最后在同学的帮助下顺利解决&a…

两台虚拟服务器如何级联,[教程] 利用open vswitch建立vxlan隧道实现不同主机上的虚拟交换机级联...

写在开头在某些环境下,需要实现两台物理机中的openvswitch交换机级联,以实现两台交换机中的设备互相通讯,这里使用vxlan隧道技术,将数据包封装在UDP中,通过以太网实现数据包传输。VXLAN是一种大二层的虚拟技术&#xf…

【POJ - 3041】Asteroids (二分图,最小点覆盖)

题干&#xff1a; Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape of an N x N grid (1 < N < 500). The grid contains K asteroids (1 < K < 10,000), which are conveniently located at the lattice points of the…

华为虚拟服务器lanip地址,2018软考网络工程师《华为基础实验》十九配置路由器为DHCPServer...

原标题&#xff1a;2018软考网络工程师《华为基础实验》十九配置路由器为DHCPServer实验要求:在R1上使能DHCP 功能。创建三个全局地址池&#xff0c;用于为三个不同部门的PC分配IP 地址。配置地址池的相关属性。在R1的接口下配置基于全局地址池的服务方式&#xff0c;实现DHCP …

电脑重启bootmgr_电脑系统启动:显示0xc0000428怎么办

错误代码&#xff1a;0xc0000428 一般都是驱动问题&#xff0c;只需要找到报错的路径驱动程序&#xff0c;删除再重启就基本上可以解决了。制作一个U盘启动&#xff0c;进入PE&#xff0c;然后删除”\Windoiws\System32\drivers\DsArk64.sys“文件&#xff0c;再重启就可以了。…

【 POJ - 2033 】Alphacode (dp,有坑)

题干&#xff1a; Alice and Bob need to send secret messages to each other and are discussing ways to encode their messages: Alice: "Lets just use a very simple code: Well assign A the code word 1, B will be 2, and so on down to Z being assigned 26.&…

两组的数据平均值合并_不要进入数据陷进

学习统计让我们不再被一些数据迷惑进入数据陷进&#xff08;例如平均工资&#xff09;从而做出正确的决策。描述性统计分析包括数据的分布、集中、波动的测度指标。平均值&#xff1a;一组数据的加和除以数据的个数&#xff08;容易随极端值变化&#xff09; 中位数&#xff1a…

【POJ - 3342】Party at Hali-Bula(树形dp,最大独立集,是否有唯一解)

题干&#xff1a; Dear Contestant, Im going to have a party at my villa at Hali-Bula to celebrate my retirement from BCM. I wish I could invite all my co-workers, but imagine how an employee can enjoy a party when he finds his boss among the guests! So, I…

安川西格玛7驱动器手册_什么是伺服驱动器?选型的原则有哪些?

头条号私信回复1&#xff0c;获取海量免费学习资源&#xff0c;内容包括自动化电气工程师必备的软件、电子书、视频教程等题图&#xff1a;伺服驱动器来源&#xff1a;百度图片什么是伺服驱动器&#xff1f;该如何选型&#xff1f;有哪些主流品牌&#xff1f;你想知道的全在这里…

java猜数游戏图形界面_Java做一个猜数的小游戏

Author &#xff1a; By Runsen效果展现猜数字游戏是一个简单&#xff0c;有趣的小游戏。游戏者通过输入一个指定区间的数字&#xff0c;与系统产生的随机数进行对比&#xff0c;然后输出相应的结果。游戏运行时产生一个0&#xff0d;10之间的随机整数&#xff0c;要求用户从控…

【CodeForces - 266C】Below the Diagonal (递归,子问题,贪心模拟)

题干&#xff1a; You are given a square matrix consisting of n rows and n columns. We assume that the rows are numbered from 1 to n from top to bottom and the columns are numbered from 1to n from left to right. Some cells (n - 1 cells in total) of the t…

python 0o_Python 中的比较:is 与 ==

在 Python 中会用到对象之间比较&#xff0c;可以用 &#xff0c;也可以用 is 。但是它们的区别是什么呢&#xff1f;is 比较的是两个实例对象是不是完全相同&#xff0c;它们是不是同一个对象&#xff0c;占用的内存地址是否相同。莱布尼茨说过&#xff1a;“世界上没有两片完…

python中long类型_浅谈python 四种数值类型(int,long,float,complex)

Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下。 数字数据类型存储数值。他们是不可改变的数据类型,这意味着改变数字数据类型的结果,在一个新分配的对象的值。 N…

【CodeForces - 264A】Escape from Stones (模拟,卡精度的处理)

题干&#xff1a; Squirrel Liss lived in a forest peacefully, but unexpected trouble happens. Stones fall from a mountain. Initially Squirrel Liss occupies an interval [0, 1]. Next, nstones will fall and Liss will escape from the stones. The stones are nu…

python开发mbus程序_Python pywmbus包_程序模块 - PyPI - Python中文网

#WIP WM总线在Python中的实现本项目实施了无线m-bus标准的部分内容&#xff0c;定义见din en 13757-1及以下。目前&#xff0c;只支持未加密的短帧(即ci 0x7a)。欢迎拉取请求。##安装###点pip install pywmbus###手动git clone https://github.com/jalmeroth/pywmbus.gitcd pyw…