java jdk 动态代理 静态代理

什么是代理模式

核心点:就是对我们的方法前后实现增强

代理模式整个应用场景

  1. 打印日志
  2. Rpc的远程调用框架
  3. Mybatis mapper
  4. Aop
  5. 事务
  6. 自定义注解
  7. 分布式事务全局id lcn seata 生成一个全局的事务id
  8. SpringBoot全局捕获异常

 

代理模式优点

减少代码冗余,提高代码复用性,安全性 隐藏真实角色、非侵入

代理实现方式分类

 

 

 

 

 

 

静态代理与动态代理

静态代理:也需要开发者自己编写代理类

静态的实现方式:1.实现接口(Jdk实现)2通过继承模式(Cglib)

 

 

动态代理设计需要写代理,统一采用程序生成

 

 

 

 

静态代理模式缺陷

需要每次人工编写代理类对象,代码非常冗余

 

动态代理模式

Jdk动态代理 采用实现接口模式实现增强

CGLIB动态代理 采用继承模式实现增强

最大优势 不需要些代理类对象通过程序生成

Jdk动态代理实现方式 invocationhandler接口重写invoke方式实现回调形式实现

增强。拦截方式

Exception in thread "main" java.lang.ClassCastException:

 com.sun.proxy.$Proxy0 cannot be cast to com.mayikt.service.impl.OrderServiceImpl

at com.mayikt.service.Test002.main(Test002.java:17)

Jdk动态代理生成的$Proxy0类可以强制成接口类型,但是不能强制实现。

以$Proxy开头

Jdk动态代理基于接口的形式实现代理

手写JavaJdk动态代理设计模式思路

 

动态代理设计模式的核心:

生成代理类对象的思想:

  1. 使用java反射机制获取当前接口的信息  javase反射机制
  2. 拼接java代码,将java代码写入在本地文件
  3. 将java代码编译为class文件
  4. 程序直接读取该class文件到内存中即可。
  5.  
  6.  1.使用java反射机制拼接$Proxy.java类的源代码
  7. 2.需要将$Proxy.java编译成$Proxy.class

    3.程序中直接读取该class文件到内存中

    public static Object newProxyInstance(ClassLoader loader,
                                          Class<?>[] interfaces,
                                          InvocationHandler h)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小笛子1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值