美文网首页
cglib简单使用

cglib简单使用

作者: 东南枝下 | 来源:发表于2021-01-22 21:29 被阅读0次

net.sf.cglib.beans 中有些工具可以动态生成、操作Bean,对Bean进行一些增强操作

net.sf.cglib.beans.BeanGenerator ---动态生成对象
net.sf.cglib.beans.BeanMap ---将对象转化成map进行操作
net.sf.cglib.beans.BeanCopier ---对象属性值复制
net.sf.cglib.proxy.Mixin ---Bean混入,将几个对象合并成一个对象

利用以上工具实现下列工具类,在实体动态增强上有一定帮助。

/**
 * @author Jenson
 */
@Slf4j
public class CglibBeanUtil {
    /**
     * 使用Map(字段名->字段类型)创建对象
     *
     * @param fieldMap 字段名->字段类型映射
     * @return 创建好的对象
     */
    public static Object createBean(Map<String, Class> fieldMap) {
        BeanGenerator generator = new BeanGenerator();
        for (String fieldName : fieldMap.keySet()) {
            generator.addProperty(fieldName, fieldMap.get(fieldName));
        }
        return generator.create();
    }

    /**
     * 使用Map(字段名->字段类型)创建对象并赋值
     *
     * @param fieldMap 字段名->字段类型 映射
     * @param valueMap 字段名->值 映射
     * @return 创建好的对象
     */
    public static Object createBean(Map<String, Class> fieldMap, Map<String, Object> valueMap) {
        Object bean = createBean(fieldMap);
        BeanMap beanMap = BeanMap.create(bean);
        for (String fieldName : valueMap.keySet()) {
            beanMap.put(fieldName, valueMap.get(fieldName));
        }
        return bean;
    }

    /**
     * 合并多个对象
     *
     * @param objects 合并对象数组
     * @return 合并后生成的新对象
     */
    public static Object mixinBean(Object... objects) {
        return Mixin.createBean(objects);
    }

    /**
     * 将一个对象转化为另一个对象,可用于混入对象转化为原有对象
     * 使用BeanCopier实现
     *
     * @param sourceBean  来源对象
     * @param targetClass 目标类
     * @return 转化后产生的对象
     */
    public static Object transformBean(Object sourceBean, Class targetClass) throws IllegalAccessException, InstantiationException {
        BeanCopier copier = BeanCopier.create(sourceBean.getClass(), targetClass, false);
        Object targetBean = targetClass.newInstance();
        copier.copy(sourceBean, targetBean, null);
        return targetBean;
    }

    /**
     * 将一个对象的属性复制到另一个对象
     *
     * @param sourceBean 来源对象
     * @param targetBean 目标对象
     */
    public static void copyBean(Object sourceBean, Object targetBean) {
        BeanCopier copier = BeanCopier.create(sourceBean.getClass(), targetBean.getClass(), false);
        copier.copy(sourceBean, targetBean, null);
    }
}


相关文章

  • cglib简单使用

    net.sf.cglib.beans 中有些工具可以动态生成、操作Bean,对Bean进行一些增强操作 net.s...

  • 十、spring aop之cglib动态代理

    使用 cglib使用需要实现MethodInterceptor接口,与JDK动态代理不同的是,cglib不需要目标...

  • 浅谈Java代理二:Cglib动态代理-MethodInterc

    CGLib动态代理特点:使用CGLib实现动态代理,完全不受代理类必须实现接口的限制,而且CGLib底层采用ASM...

  • Cglib和jdk动态代理

    Cglib和jdk动态代理说到cglib技术,使用的就是增强类Enhancer,底层使用的ASM技术.下面举例说明...

  • 动态代理——CGLib

    动态代理——CGLib 基本使用 或者 原理分析,待续...

  • # 源码解析:AOP(2)

    接上篇# 源码解析:AOP cglib类代理 使用cglib实现的代理与jdk代理类似,只是代理对象的构造方式不同...

  • cglib使用文档

    cglib简介 GitHub:https://github.com/cglib/cglib/ cglib是一款开源...

  • Spring AOP实现

    使用SpringBoot实现AOP动态代理 1 使用CGLIB实现AOP动态代理 .properties .xml

  • cglib学习笔记

    cglib学习笔记 cglib简介 cglib:Code Generation Library主页:https:/...

  • spring aop 汇总

    静态代理、动态代理和cglib代理 aop 使用 Spring AOP - 注解方式使用介绍spring aop ...

网友评论

      本文标题:cglib简单使用

      本文链接:https://www.haomeiwen.com/subject/davezktx.html