使用 cglib_cglib入门后篇

在前面一篇文章中,详解介绍了 cglib 的 Enhancer 及配合使用的各种回调,然后使用 Enhancer 实现了动态代理。

在这篇文章中, 再来介绍一下 cglib 的其他能力。

?

本文基于 OpenJDK11

1. Bean 操作

Java Bean 是最常用的类型,cglib 提供了很多工具来操作这些 Bean,以满足各类需求。

Immutable Bean

ImmutableBean 用来生成不可变对象,如果强行修改,将会抛出 IllegalStateException

对原底线所有的改变都会反应到这个不可变对象。也就是可以通过修改原对象来修改这个不可变的对象。

HelloImpl helloImpl = new HelloImpl();helloImpl.setValue("ray");HelloImpl immutableBean = (HelloImpl) ImmutableBean.create(helloImpl);helloImpl.setValue("hello");System.out.println(helloImpl.getValue().equals("hello")); // trueSystem.out.println(immutableBean.getValue().equals("hello")); // trueimmutableBean.setValue("Hello ray"); //java.lang.IllegalStateException: Bean is immutable

Bean Generator

BeanGenerator 在运行时创建一个新的 Bean。在使用第三方库时,不确定类型,就可以使用这种方式来动态创建 Bean。

BeanGenerator beanGenerator = new BeanGenerator();beanGenerator.addProperty("value", String.class);Object myBean = beanGenerator.create();Method setter = myBean.getClass().getMethod("setValue", String.class);setter.invoke(myBean, "Hello cglib!");Method getter = myBean.getClass().getMethod("getValue");System.out.println("Hello cglib!".equals(getter.invoke(myBean))); // true

Bean Copier

BeanCopier 用来复制对象,可以复制同类型的 bean,也可以复制不同类型的 bean。

BeanCopier copier = BeanCopier.create(HelloImpl.class, HelloImpl.class, false); // 这里也可以是在不同的 bean 之间复制HelloImpl bean = new HelloImpl();bean.setValue("Hello cglib!");HelloImpl otherBean = new HelloImpl();copier.copy(bean, otherBean, null);System.out.println("Hello cglib!".equals(otherBean.getValue())); // true

而且还可以通过传入 Converter 参数来实现自定义拷贝规则,需要把 BeanCopier.create 的第三个参数设置为 true。

BeanCopier copier = BeanCopier.create(HelloImpl.class, HelloImpl.class, true); // 这里也可以是在不同的 bean 之间复制HelloImpl bean 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值