⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mybeanutils.java

📁 关于 Jaoso新闻文章发布系统 --- --- --- --- --- --- --- --- --- --- --- --- --- -- 版本信息:Jaoso新闻文章发布系统 0.9.1b
💻 JAVA
字号:
package jaoso.framework.util;

import jaoso.framework.domain.Account;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.DynaProperty;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.beans.PropertyDescriptor;

import java.lang.reflect.InvocationTargetException;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;


/**
 * @author Edgeloner
 * @since 2004/6/23
 *
 */
public class MyBeanUtils extends BeanUtils {

    //~ Static fields/initializers =============================================

    /**  DOCUMENT ME! */
    private static Log log = LogFactory.getLog(MyBeanUtils.class);

    //~ Constructors ===========================================================

    /**
     *default constructor
     */
    public MyBeanUtils() {
        super();
    }

    //~ Methods ================================================================

    /**
     *override BeanUtils method copyProperties,
     *support not copy null or blank property
     *
     * @param dest DOCUMENT ME!
     * @param orig DOCUMENT ME!
     *
     * @throws IllegalAccessException DOCUMENT ME!
     * @throws InvocationTargetException DOCUMENT ME!
     * @throws IllegalArgumentException DOCUMENT ME!
     */
    public static void copyProperties(Object dest, Object orig)
        throws IllegalAccessException, InvocationTargetException {

        // Validate existence of the specified beans
        if (dest == null) {

            throw new IllegalArgumentException("No destination bean specified");
        }

        if (orig == null) {

            throw new IllegalArgumentException("No origin bean specified");
        }

        if (log.isDebugEnabled()) {

            log.debug("BeanUtils.copyProperties(" + dest + ", " + orig + ")");
        }

        // Copy the properties, converting as necessary
        if (orig instanceof DynaBean) {

            DynaProperty[] origDescriptors = ((DynaBean) orig).getDynaClass()
                                              .getDynaProperties();

            for (int i = 0; i < origDescriptors.length; i++) {

                String name = origDescriptors[i].getName();

                if (PropertyUtils.isWriteable(dest, name)) {

                    Object value = ((DynaBean) orig).get(name);

                    if (value == null) {

                        continue;
                    }

                    if (value instanceof String
                            && MyUtils.isBlank((String) value)) {

                        continue;
                    }

                    copyProperty(dest, name, value);
                }
            }
        } else if (orig instanceof Map) {

            Iterator names = ((Map) orig).keySet()
                              .iterator();

            while (names.hasNext()) {

                String name = (String) names.next();

                if (PropertyUtils.isWriteable(dest, name)) {

                    Object value = ((Map) orig).get(name);

                    if (value == null) {

                        continue;
                    }

                    if (value instanceof String
                            && MyUtils.isBlank((String) value)) {

                        continue;
                    }

                    copyProperty(dest, name, value);
                }
            }
        } else /* if (orig is a standard JavaBean) */
         {

            PropertyDescriptor[] origDescriptors = PropertyUtils
                .getPropertyDescriptors(orig);

            for (int i = 0; i < origDescriptors.length; i++) {

                String name = origDescriptors[i].getName();

                if ("class".equals(name)) {

                    continue; // No point in trying to set an object's class
                }

                if (PropertyUtils.isReadable(orig, name)
                        && PropertyUtils.isWriteable(dest, name)) {

                    try {

                        Object value = PropertyUtils.getSimpleProperty(orig,
                                name);

                        if (value == null) {

                            continue;
                        }

                        if (value instanceof String
                                && MyUtils.isBlank((String) value)) {

                            continue;
                        }

                        copyProperty(dest, name, value);
                    } catch (NoSuchMethodException e) {

                        ; // Should not happen
                    }
                }
            }
        }
    }

    /**
     * DOCUMENT ME!
     *
     * @param args DOCUMENT ME!
     */
    public static void main(String[] args) {

        Map a = new HashMap();
        Map b = new HashMap();
        a.put("a1", "11111111");
        a.put("a2", "22222222");
        a.put("a3", "33333333");
        b.put("a1", "11111111");
        b.put("a2", null);
        b.put("a3", "");
        System.out.println(a);
        System.out.println(b);

        Account aa = new Account();
        Account bb = new Account();
        aa.setId(null);
        aa.setName("aa");
        bb.setId("id");
        bb.setName("bb");

        try {

            // BeanUtils.copyProperties(a,b);
            System.out.println(aa.getId());
            System.out.println(aa.getName());
            System.out.println("bb" + bb.getId());
            System.out.println("bb" + bb.getName());

            //copyProperty(bb,"id",null);
            copyProperties(bb, aa);
            System.out.println(aa.getId());
            System.out.println(aa.getName());
            System.out.println("bb" + bb.getId());
            System.out.println("bb" + bb.getName());
        } catch (IllegalAccessException e) {

            e.printStackTrace();
        } catch (InvocationTargetException e) {

            e.printStackTrace();
        }

    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -