- package com.goofus.tool.shove.util;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- import com.goofus.tool.shove.entry.Message;
- public class BeanUtil {
- private static String skipMethod = "wait#hashCode#getClass#equals#toString#notify#notifyAll";
- /**
- * 实体拷贝,根据get及set方法
- * @author goofus/yinly
- * Jul 18, 2013
- * @param src
- * @param dest
- */
- @SuppressWarnings("unchecked")
- public final static void copy(Object src, Object dest) {
- Class srcClazz = src.getClass();
- Class destClazz = dest.getClass();
- Method[] sMethods = srcClazz.getMethods();
- Method[] dMethods = destClazz.getMethods();
- for(int i=0,ilen=sMethods.length; i<ilen; i++) {
- Method method = sMethods[i];
- String mn = method.getName();
- if(BeanUtil.skipMethod.indexOf(mn) == -1) {
- if(mn.startsWith("get")) {
- try {
- mn = mn.replaceFirst("get", "set");
- for(int j=0,jlen=dMethods.length; j<jlen; j++) {
- Method dMethod = dMethods[j];
- if(dMethod.getName().equalsIgnoreCase(mn)) {
- dMethod.invoke(dest, method.invoke(src));
- }
- }
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
- /**
- * @author goofus/yinly
- * Jul 18, 2013
- * @param args
- */
- public static void main(String[] args) {
- Message m = new Message();
- m.setContent("test bean copy.");
- Message m3 = m;
- System.out.println(m);
- System.out.println(m3);
- System.out.println(m.getContent());
- m.setContent(m.getContent() + "kkkkkkkkkkkkkkkkkkkkkkk");
- System.out.println(m3.getContent());
- System.out.println("----------------------");
- Message m2 = new Message();
- copy(m,m2);
- System.out.println(m);
- System.out.println(m2);
- System.out.println(m.getContent());
- m.setContent(m.getContent() + "000000000000000000000000");
- System.out.println(m.getContent());
- System.out.println(m2.getContent());
- }
- public String getSkipMethod() {
- return skipMethod;
- }
- public void setSkipMethod(String skipMethod) {
- this.skipMethod = this.skipMethod + "#" + skipMethod;
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/2410201410804.html
来源: http://www.codesnippet.cn/detail/2410201410804.html