反射-Cglib
OkidoGreen
这个作者很懒,什么都没留下…
展开
-
如何优雅的转换 Bean 对象!
背景我们的故事要从一个风和日丽的下午开始说起!这天,外包韩在位置上写代码~外包韩根据如下定义 PO(persistant object):持久化对象,可以看成是与数据库中的表相映射的 java 对象。最简单的 PO 就是对应数据库中某个表中的一条记录。 VO(view object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。 BO(business object):业务对象,主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其转载 2020-11-14 11:15:41 · 835 阅读 · 1 评论 -
cglib源码分析(四):cglib 动态代理原理分析
本文分下面三个部分来分析cglib动态代理的原理。cglib动态代理示例 代理类分析 Fastclass 机制分析一、cglib 动态代理示例 1 public class Target{ 2 public void f(){ 3 System.out.println("Target f()"); 4 } 5 public void g(){ 6 System.out.println("Target g()"); 7...转载 2020-06-20 23:25:45 · 895 阅读 · 0 评论 -
Cglib源码分析 invoke和invokeSuper的差别
Cglib的实例本文重在源码的分析,Cglib的使用不再复述。//被代理类public class InfoDemo { public void welcome (String person){ System.out.println("welcome :" + person); }}public class CglibInfoProxy implements MethodInterceptor { private Object target; ...转载 2020-06-20 23:09:11 · 1066 阅读 · 1 评论 -
cglib动态代理中invokeSuper和invoke的区别
首先需要先说一下FastClass。在使用Cglib动态代理时会生成3个新类,如下图所示。第一个文件:代理类的FastClass类第二个文件:代理类,继承自被代理类第三个文件:被代理类的FastClass类 FastClass类主要实现了字节码与执行方法的索引关系。大致果然如下图所示,“字符串”与“对象”分别的两个过程的主要入参。cglib代理以这种方式避免了对被代理对象的反射调用,这也是cglib性能较优于JDK代理的地方。但是...转载 2020-06-20 21:45:25 · 5596 阅读 · 1 评论 -
CGLIB 与 ASM 版本冲突
CGLIB 版本3.1 自带 ASM 4.2 版本与引入的 ASM 3.3.1 冲突,故依赖CGLIB 自身依赖的ASM 即可 --> asm--> asm--> ${asm.version}--> --> cglib转载 2017-09-21 12:47:44 · 9838 阅读 · 0 评论 -
BeanCopier系列之三:缓存BeanCopier提升性能
BeanCopier系列之一:特性测试 BeanCopier系列之二:使用Converter BeanCopier拷贝速度快,性能瓶颈出现在创建BeanCopier实例的过程中。 所以,把创建过的BeanCopier实例放到缓存中,下次可以直接获取,提升性能: Java代码 public class CachedBeanCopier {转载 2017-09-20 15:22:57 · 4368 阅读 · 0 评论 -
关于BeanCopier的一些思考
在做业务的时候,我们有时为了隔离变化,会将DAO查询出来的Entity,和对外提供的DTO隔离开来。大概90%的时候,它们的结构都是类似的,但是我们很不喜欢写很多冗长的b.setF1(a.getF1())这样的代码,于是我们需要BeanCopier来帮助我们。在做业务的时候,我们有时为了隔离变化,会将DAO查询出来的Entity,和对外提供的DTO隔离开来。大概90%的时候,它们的结构都是原创 2017-09-20 15:22:11 · 2006 阅读 · 0 评论 -
BeanCopier系列之一:特性测试
BeanCopier系列之二:使用Converter BeanCopier系列之三:缓存BeanCopier提升性能 cglib是一款比较底层的操作java字节码的框架。 下面通过拷贝bean对象来测试BeanCopier的特性: Java代码 public class OrderEntity { private int转载 2017-09-20 15:20:47 · 943 阅读 · 0 评论 -
BeanCopier系列之二:使用Converter
BeanCopier系列之一:特性测试 BeanCopier系列之三:缓存BeanCopier提升性能 当源和目标类的属性类型不同时,不能拷贝该属性,此时我们可以通过实现Converter接口来自定义转换器: 源类和目标类: Java代码 public class AccountEntity { private int i转载 2017-09-20 15:20:12 · 8453 阅读 · 0 评论 -
实战CGLib系列之proxy篇(三):延迟加载LazyLoader
转自:http://shensy.iteye.com/blog/1881277本系列文章均整理自我在先前一家公司的CGLib使用总结和笔记。分享出来,希望对看到的人有所帮助,同时欢迎大家提出宝贵意见。如需转载,请勿修改,且注明作者shensy及出处。--------------------------------------实战CGLib系列文章本篇介绍延迟加载器Laz转载 2016-10-27 06:56:11 · 1506 阅读 · 0 评论 -
CGLIB简介
CGlib是什么? CGlib是一个强大的,高性能,高质量的Code生成类库。它可以在运行期扩展Java类与实现Java接口。 当然这些实际的功能是asm所提供的,asm又是什么?Java字节码操控框架,具体是什么大家可以上网查一查,毕竟我们这里所要讨论的是cglib, cglib就是封装了asm,简化了asm的操作,实现了在运行期动态生成新的class。 可能大家还感觉不到它的强转载 2016-10-27 06:53:07 · 1636 阅读 · 0 评论 -
CGLIB入门
1. Enhancer和MethodInterceptorEnhancer可以用来动态的生成一个类,这个类可以继承指定的一个类,实现指定的一些接口。同时,Enhancer在生成一个类之前需要指定一个Callback,当类方法调用时,方法的执行被分配给这个CallbackMethodInterceptor是一个使用比较多的继承自Callback的接口,它只有一个方法声明转载 2016-10-27 06:45:07 · 930 阅读 · 0 评论 -
cglib源码学习交流
背景 前段时间在工作中,包括一些代码阅读过程中,spring aop经常性的会看到cglib中的相关内容,包括BeanCopier,BulkBean,Enancher等内容,以前虽大致知道一些内容,原理是通过bytecode,但没具体深入代码研究,只知其所用不知其所以然,所以就特地花了半天多的工作时间研究了CGLIB的相关源码,同时结合看了下 spring Aop中对CGLIB的使用转载 2016-10-27 06:49:50 · 1043 阅读 · 0 评论