java jdk动态代理 cglib动态代理demo
最近在研究java动态代理这块,以前也看了很多次java动态代理,感觉一直不是怎么明白,这两天看了看又明白了些,现给出我参考网上写的一个demo
jdk动态代理实现:
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;public class DynamicProxy implements InvocationHandler {private Target target;public DynamicProxy(Target target) {this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {System.out.println("before the work");method.invoke(target, args);System.out.println("after the work");return null;}public Target getProxy() {Class<?>[] interfaces = this.target.getClass().getInterfaces();if (interfaces == null || interfaces.length == 0) {interfaces = new Class<?>[] { Target.class };}Target proxy = (Target) Proxy.newProxyInstance(this.target.getClass().getClassLoader(), interfaces, this);return proxy;}public static void main(String[] args) {Target target = new TargetImpl();new DynamicProxy(target).getProxy().sayHello();}}interface Target {public void sayHello(); }class TargetImpl implements Target {public void sayHello() {System.out.println("hello world");} }
cglib动态代理demo:
import java.lang.reflect.Method;import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy;public class TestCglibProxy {public static void main(String[] args) {Target target = new Target();TestCglibProxy testCglibProxy = new TestCglibProxy();Target targetProxy = (Target) testCglibProxy.createProxy(target.getClass());targetProxy.sayHello();}public Object createProxy(Class targetClass) {Enhancer enhancer = new Enhancer();enhancer.setSuperclass(targetClass);enhancer.setCallback(new MethodInteceptor());return enhancer.create();} }class MethodInteceptor implements MethodInterceptor {@Overridepublic Object intercept(Object object, Method method, Object[] arg2,MethodProxy methodProxy) throws Throwable {System.out.println("start to do the work");Object result = methodProxy.invokeSuper(object, arg2);System.out.println("end:do the work");return "haha";} }class Target {public void sayHello() {System.out.println("hello world");} }
jdk实现版本只支持接口的动态代理,如果某个类没有实现接口,他就无法为他进行动态代理,在生成代理对象的时候需要传入的参数就包括“接口”
cglib实现方式不利用接口,而是为现有的类,生成一个子类,然后进行调用.cglib底层实现用asm方式
对于这两种方式的底层具体实现还需要再研究
转载于:https://www.cnblogs.com/striveforver/archive/2012/09/29/2708080.html
java jdk动态代理 cglib动态代理demo相关推荐
- Java设计模式(五)代理设计模式—静态代理—JDK动态代理—Cglib动态代理
文章目录 什么是代理模式 代理模式应用场景 代理的分类 静态代理 什么是静态代理 深入解析静态代理 小结 动态代理 什么是动态代理 JDK动态代理 原理和实现方式 代码实现 优缺点 Cglib动态代理 ...
- 静态代理,cglib动态代理,jdk动态代理区别以及流程详解
1.静态代理 静态代理使用的是代理设计模式,不讲高大上的思想,我们直接实战 这是动物接口,其中有一个吃饭方法 这是其中的一只动物,实现了动物接口,覆盖了吃饭方法 现在我们思考,我想要给猫找一个代理,希 ...
- 动态代理——CGLIB动态代理原理示例解析
觉得可以的话点个关注,转个发呗,陆续奉上干货~~~~ 前文我们讲解了JDK动态代理的原理(动态代理--JDK动态代理原理),今天我们来看看CGLIB动态代理是如何实现,最后我们总结下JDK动态代理和C ...
- Java jdk proxy、cglib、aspectj 三种常用代理示范
JDK Proxy 必须实现接口,没有实现接口用cglib. Animal接口 package com.example.test.jdk_proxy;/*** @Author humorchen* @ ...
- Java动态代理的两种实现方法:JDK动态代理和CGLIB动态代理
Java动态代理的两种实现方法:JDK动态代理和CGLIB动态代理 代理模式 JDK动态代理 CGLIB动态代理 代理模式 代理模式是23种设计模式的一种,指一个对象A通过持有另一个对象B,可以具有B ...
- Java两种动态代理JDK动态代理和CGLIB动态代理
目录 代理模式 JDK动态代理 cglib动态代理 测试 代理模式 代理模式是23种设计模式的一种,他是指一个对象A通过持有另一个对象B,可以具有B同样的行为的模式.为了对外开放协议,B往往实现了一个 ...
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
Java之代理... 1 一. 概念... 1 二. jdk的静态代理... 1 三. jdk动态代理... 4 四. cglib 动态 ...
- 代理模式(Java版)-静态代理、JDK动态代理和CGLib动态代理
代理模式前传 前几天有个小朋友问到我代理模式,这个我拿手的嘛.废话不多说,直接开讲?这是不可能的. 一般呢,讲模式之前呢,礼貌上都要讲个前传.象我这种老了根本不怕没有故事祭奠的人,随手一个前传开始. ...
- Java 结合实例学会使用 静态代理、JDK动态代理、CGLIB动态代理
前言 代理 代理 代理 代理 代理 代理 代理 代理 代理 代理 代理 代理 代理 代理 代理 代理 代理 代理 代理 代理 很多人至今都是看到 代理就懵, 静态代理.动态代理.JDK动态代理.CGL ...
最新文章
- 用于小型图形挖掘研究的瑞士军刀:空手道俱乐部的图表学习Python库
- 支付宝发布黑科技“如影计划”,这真的不是愚人节的玩笑
- python常见的排序算法_常见排序算法之python实现
- pmp考试必知的十个图和表
- java 酒店预定 app_Android应用源码酒店在线预定app项目全套
- Python高级——多线程(threading)
- 项目复盘:从0到1,如何做好竞品分析?
- 好的 Web 前端年薪会有多少?
- python工程师工资多少-2018年涨工资了吗?Python 工程师薪资最新出炉
- 笔记3:Tensorflow2.0实战之MNSIT数据集
- puppet详解(四)——package资源详解
- 产品经理入门知识梳理(含思维导图
- Matlab之数据归一化函数——mapminmax()
- 微信公众号 开发详解05【二维码制作、调查表单、短网址、微小宝、引流】
- 如何使用荣耀手机的计算机功能,华为荣耀手机投屏电脑教程
- linux 查看内网IP和外网IP
- 【设计模式 三】实战工厂汽车代工之工厂模式-简单模式
- Java虚拟机启动整体流程和基础学习(内容很多,不可快餐阅读),推理+源码论证
- 用程序实现基本计算器功能
- 用html制作学生成绩表格代码,利用Excel制作学生成绩表.doc
热门文章
- 计算机网络—基础概念
- SQL面试题--(26~46)
- bzoj 1821: [JSOI2010]Group 部落划分
- self.modules() 和 self.children()的区别
- java中mydoc_实验二/MyDoc.java · 20175326李一潇/20175326java - Gitee.com
- U 盘安装 CentOS的方法
- 洛谷 P1086 花生采摘
- HDU 1010 深搜+奇偶剪枝
- 基于Altium Designer的4层PCB板的绘制
- 不能不说的C#特性-表达式树