Cglib動態生成Bean

          在動態生成表格的場景裏Cglib的動態生成Bean很簡單實用,分享下demo。

         



import com.alibaba.fastjson.JSON;
import net.sf.cglib.beans.BeanGenerator;
import net.sf.cglib.beans.BeanMap;

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

/**
 * @Auther: liuzujie
 * @Desc: 動態生成Bean
 */
public final class CglibBean {
    /**
     * 實體Object
     */
    private Object object = null;

    /**
     * 屬性map
     */
    private BeanMap beanMap = null;

    public CglibBean() {
        super();
    }

    public CglibBean(Map<String, Class<?>> propertyMap) {
        this.object = generateBean(propertyMap);
        this.beanMap = BeanMap.create(this.object);
    }

    /**
     * 給bean屬性賦值
     *
     * @param property 屬性名
     * @param value    值
     */
    public void setValue(String property, Object value) {
        beanMap.put(property, value);
    }

    /**
     * 通過屬性名得到屬性值
     *
     * @param property 屬性名
     * @return 值
     */
    public Object getValue(String property) {
        return beanMap.get(property);
    }

    /**
     * 得到該實體bean對象
     */
    public Object getObject() {
        return this.object;
    }

    private Object generateBean(Map<String, Class<?>> propertyMap) {
        if (propertyMap == null || propertyMap.isEmpty()) {
            return null;
        }
        BeanGenerator generator = new BeanGenerator();

        for (Map.Entry<String, Class<?>> entry : propertyMap.entrySet()) {
            generator.addProperty(entry.getKey(), entry.getValue());
        }
        return generator.create();
    }

    public static void main(String[] args) throws ClassNotFoundException {
        // 設置類成員屬性
        Map<String, Class<?>> propertyMap = new HashMap<>();
        propertyMap.put("id", Class.forName("java.lang.Integer"));
        propertyMap.put("name", Class.forName("java.lang.String"));
        propertyMap.put("address", Class.forName("java.lang.String"));
        // 生成動態 Bean
        CglibBean bean = new CglibBean(propertyMap);
        // 給 Bean 設置值
        bean.setValue("id", 123);
        bean.setValue("name", "姓名");
        bean.setValue("address", "地址");
        System.out.println("獲取對象必須getObject(),不然獲取到的是包含在CglibBean裏的object:" + JSON.toJSON(bean.getObject()));
        // 從 Bean 中獲取值
        System.out.println("id      = " + bean.getValue("id"));
        System.out.println("name    = " + bean.getValue("name"));
        System.out.println("address = " + bean.getValue("address"));
    }
}

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章