博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中代理简述
阅读量:6898 次
发布时间:2019-06-27

本文共 557 字,大约阅读时间需要 1 分钟。

hot3.png

一、jdk动态代理和cglib代理的区别

1.jdk动态代理只能对实现了接口的类生成代理,而不是针对类。
2.cglib是针对类实现代理,只要是对指定的类生成一个子类,覆盖其中的方法,因为是继承,所以该类或方法最好不要声明为final。
二、静态代理
1.静态代理主要是在虚拟机启动时通过改变目标对象字节码的方式来完成对目标对象的增强,它与动态代理相比具有更高的效率,因为在动态代理调用的过程中,还需要一个动态创建代理类并代理目标对象的步骤,而静态代理则是在启动时便完成了字节码增强,当系统再次调用目标类时与调用正常的类并无差别,所以在效率上会相对高些。
2.Java1.5中引入java.lang.instrument,你可以由此实现一个Java agent,通过此agent来修改类的字节码即改变一个类,从而实现静态代理。
三、spring中jdk与cglib代理方式:
1.如果目标对象实现了接口,默认情况下会采用jdk的动态代理实现aop
2.如果目标对象实现了接口,可以强制使用cglib实现aop
3.如果目标对象没有实现接口,必须采用cglib库,spring会自动在jdk动态代理和cglib之间转换

转载于:https://my.oschina.net/u/2269952/blog/471673

你可能感兴趣的文章
设计模式命令模式(行为型)
查看>>
RN开发快速切换底部导航时react-native-swiper轮播图组件白屏
查看>>
sublime px -> rem sass
查看>>
瀑布流照片墙布局
查看>>
日常工具--渐变+找图+压缩图片
查看>>
《Redis开发与运维》慢查询分析 读书笔记
查看>>
学习仿饿了么遇到商品详情页的添加购物车按钮没有动画,$emit派发事件
查看>>
一些开发chrome插件用到的API总结
查看>>
Java集合(二)-LinkedList源码解析
查看>>
如何配置wamp后运行magento2
查看>>
python学习干货教程(15):迭代器和生成器
查看>>
全新打包工具parcel零配置vue开发脚手架
查看>>
Flutter之布局类Widget
查看>>
three.js性能优化
查看>>
Choerodon如何进行日志收集与告警
查看>>
Vue篇之vue 使用Jade模板写html,stylus写css
查看>>
css_17 | CSS——CSS 拓展:② CSS 编码规范
查看>>
spring web 项目启动过程分析
查看>>
Android LaunchMode使用场景
查看>>
Android Gradle Plugin 2.3.3 升级 3.0.0 遇到的问题
查看>>