我们再新建一个AmethodClass来,不实现任何接口。

某个类的方法实现不需要继承任何接口。

如果 Spring 识别到所代理的类没有实现 Interface,那么就会使用 CGLib 来创建动态代理,原理实际上成为所代理类的子类。

有需要执行方法的类:

package com.testcglibProxy;/*** @author liuchaoOvO on 2019/2/21*/
public class AmethodClass
{public void a(){System.out.println("====aaaaaaa===");}public void b(){System.out.println("====bbbbb===");}public static void before(){System.out.println("====before===");}public static void post(){System.out.println("====post===");}
}

cglib 动态代理类,实现MethodInterceptor

package com.testcglibProxy;import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;import java.lang.reflect.Method;/*** @author liuchaoOvO on 2019/2/21*/
public class CGLibProxy implements MethodInterceptor
{//私有静态化实例对象private static volatile CGLibProxy instance;//私有化构造函数private CGLibProxy(){};//公有静态化实例方法public static CGLibProxy getInstance(){if(instance==null){synchronized (CGLibProxy.class){if (instance == null){instance = new CGLibProxy();}}}return instance;}@Overridepublic Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable{//随意找到前置执行方法AmethodClass.before();//重点为cglib动态代理方法的执行Object obj = methodProxy.invokeSuper(o, objects);//随意找到后置执行方法AmethodClass.post();return obj;}private Enhancer enhancer = new Enhancer();//生成为具体需要代理类的子类public <T> T getProxy(Class<T> clazz){enhancer.setSuperclass(clazz);enhancer.setCallback(this);return (T) enhancer.create();}}

生成具体cglib代理类的工厂方法  生成具体的实例

package com.testcglibProxy;/*** @author liuchaoOvO on 2019/2/21*/
public class ProxyFactory
{public static AmethodClass newCGLibProxy() {return CGLibProxy.getInstance().getProxy(AmethodClass.class);}
}

测试

package com.testcglibProxy;/*** @author liuchaoOvO on 2019/2/21*/
public class testMain
{public static void main(String agrs[]){AmethodClass amethodClass= ProxyFactory.newCGLibProxy();amethodClass.a();amethodClass.b();}
}

运行结果

CGLib 动态代理Demo相关推荐

  1. java jdk动态代理 cglib动态代理demo

    最近在研究java动态代理这块,以前也看了很多次java动态代理,感觉一直不是怎么明白,这两天看了看又明白了些,现给出我参考网上写的一个demo jdk动态代理实现: View Code import ...

  2. 你必须会的 JDK 动态代理和 CGLIB 动态代理

    来自:ytao 我们在阅读一些 Java 框架的源码时,基本上常会看到使用动态代理机制,它可以无感的对既有代码进行方法的增强,使得代码拥有更好的拓展性.通过从静态代理.JDK 动态代理.CGLIB 动 ...

  3. jdk动态代理实例和cglib动态代理实例_CGLib 动态代理 原理解析

    JDK 动态代理实现与原理 首先来看一段CGLib代理的测试代码(MethodInterceptor的测试, 其他类型这里不做展开了). Util类的代码在后面给出的码云片段中 public 下面的输 ...

  4. JDK和cglib动态代理代码示例

    JDK和cglib动态代理代码: package com.zhangxueliang.demo.proxy;import java.lang.reflect.InvocationHandler; im ...

  5. jdk、cglib动态代理代码示例

    文章目录 jdk动态代理 实现步骤 代码示例 新建一个接口 新建一个接口的实现类 新建一个代理类 调用测试 cglib动态代理实现 实现步骤 创建一个实现类 新建一个代理类 调用测试 jdk动态代理 ...

  6. Java 静态代理、Java动态代理、CGLIB动态代理

    为什么80%的码农都做不了架构师?>>>    Java 的代理就是客户类不再直接和委托类打交道, 而是通过一个中间层来访问, 这个中间层就是代理.为啥要这样呢, 是因为使用代理有 ...

  7. Java静态代理、动态代理以及CGLIB动态代理

    代理模式是java中最常用的设计模式之一,尤其是在spring框架中广泛应用.对于java的代理模式,一般可分为:静态代理.动态代理.以及CGLIB实现动态代理. 对于上述三种代理模式,分别进行说明. ...

  8. CGLIB 动态代理用例及源码解析

    CGLIB 动态代理 参考链接:https://blog.csdn.net/yhl_jxy/article/details/80633194 参考链接:https://www.jianshu.com/ ...

  9. JDK和CGLIB动态代理原理

    JDK动态代理原理解析 一.例子: 1.定义基础接口 public interface HttpApi {String get(String url); } 2.实现类 public class Re ...

最新文章

  1. 时间和邮箱的正则表达式,获取当前时间函数
  2. 超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大
  3. 计算机开机引导的结果是,电脑开机显示引导媒体是怎么回事
  4. [转载] Google Java代码规范
  5. 【BZOJ1854】【codevs3358】游戏,二分图最大匹配
  6. python字符串(in 和not in)(一分钟读懂)
  7. WEB UI基础八:链接跳转到标准的工单界面
  8. Android 四大组件学习之Server一
  9. 华为交换机各种配置实例
  10. python父亲节快乐_一个“MacBook”新手的Python“笨办法”自学之旅 #第七章:字符串、文本、各种打印、转义序列、手动输入raw_input()...
  11. 学习语言的方法,你了解几种?
  12. POI生成动态模板PPT报告
  13. 谷歌是否让我们变得愚蠢?
  14. android设置图片亮度分10档,批处理图片同时调整图片亮度批处理图的大小压缩图片裁边(6页)-原创力文档...
  15. 产品公司解决方案、解决方案公司解决方案,可能你做了一辈子IT你也不知道...
  16. [4G5G基础学习]:流程 - 4G LTE PLMN选择、扫频、小区搜索、系统消息读取、小区选择过程
  17. 2012年CSDN高校俱乐部秋季巡讲结案报告
  18. PostgreSQL WHEN others THEN
  19. 关于计算机技术的报纸,报社电子计算机中心
  20. ios-UI-汤姆猫德游戏实现

热门文章

  1. 链路预测算法的评价指标
  2. win11修改ip属地
  3. 滑动窗口滤波 c语言,关于中值滤波算法 以及C语言实现
  4. 计算机课程设计之图书借阅小程序-图书馆借阅管理小程序代码-校园图书馆借书还书小程序
  5. 编译linux为病毒,Linux杀毒软件ClamAV(转:秦工)
  6. matlab实现差分进化算法DE
  7. 5.16特长生模拟题 买装备
  8. Windows窗口相关的一些概念解释
  9. android 获取hdmi数据格式,一种基于Android系统HDMI同显时节省带宽的方法与流程
  10. wireshark添加h264解析插件