阶段3 2.Spring_07.银行转账案例_9 基于子类的动态代理

代理一个普通的java类


导入cglib的包
阶段3 2.Spring_07.银行转账案例_9 基于子类的动态代理
它还有一个asm的依赖。会自动加进来
阶段3 2.Spring_07.银行转账案例_9 基于子类的动态代理
创建cglib的文件夹。把proxy里面的Client和Producer复制到cglib文件夹
阶段3 2.Spring_07.银行转账案例_9 基于子类的动态代理
Producer不实现任何的接口
阶段3 2.Spring_07.银行转账案例_9 基于子类的动态代理
Client内的代码要重新写

不能受罪种类,如果是最终类就不能再创建子类了

阶段3 2.Spring_07.银行转账案例_9 基于子类的动态代理

参数1是Class 参数2是Callback
阶段3 2.Spring_07.银行转账案例_9 基于子类的动态代理

阶段3 2.Spring_07.银行转账案例_9 基于子类的动态代理
MethodInterceptor是Callback的子接口
阶段3 2.Spring_07.银行转账案例_9 基于子类的动态代理
前面三个参数和基于接口的动态代码参数是一样的
阶段3 2.Spring_07.银行转账案例_9 基于子类的动态代理

阶段3 2.Spring_07.银行转账案例_9 基于子类的动态代理
producer需要用final来修饰
阶段3 2.Spring_07.银行转账案例_9 基于子类的动态代理

阶段3 2.Spring_07.银行转账案例_9 基于子类的动态代理
调用一下这个方法,传入1万2f
阶段3 2.Spring_07.银行转账案例_9 基于子类的动态代理

阶段3 2.Spring_07.银行转账案例_9 基于子类的动态代理
阶段3 2.Spring_07.银行转账案例_9 基于子类的动态代理

对已经写好的方法进行增强。并且在增强的过程中提供一些我们需要实现的功能

用处

连接池的close方法在关闭的时候不能真正的关闭,而是要还回池中。那就可以使用动态代理的方式对connection的close方法进行增强。把它加回到池里面去

解决全站中文乱码request方法的增强,用装饰者模式可以实现,用动态代理同样可以实现。就是对getParameter的三个方法进行增强。

 

上一篇:Java设计模式之代理模式 - CGLib 动态代理分析


下一篇:springboot-cglib动态代理实现代码增强