Java进阶---动态代理

本文讨论了静态代理的自定义实现及其优缺点,强调了在目标类和代理类增多时使用动态代理(包括JDK动态代理和cglib库)的灵活性。重点介绍了如何通过InvocationHandler和Proxy类在JDK中创建动态代理对象。
摘要由CSDN通过智能技术生成

代理分类


静态代理

  • 代理类是自己手工实现的,自己创建一个java类, 表示代理类
  • 同时你所要代理的目标类是确定的

特点

  • 实现简单
  • 容易理解

缺点

  • 当目标类增加了, 代理类可能也需要成倍的增加. 代理类数量过多
  • 当你的接口中功能增加了, 或者修改了, 会影响众多的实现类. 厂家类,代理类都需要修改,影响较大

目标类和代理类很多的时候,建议使用动态代理

动态代理

  • 在程序执行过程中,使用jdk的反射机制, 创建代理类对象,并动态的指定要代理目标类
  • 动态代理是一种创建java对象的能力, 能创建代理类对象
  • 可以给不同的目标随时创建代理

实现方式

  • jdk动态代理
    • 反射包 java.lang.reflect
  • cglib动态代理
    • 第三方的工具 Code Generation Library
    • cglib的原理是继承, 通过继承目标类,创建它的子类,在子类中重写父类中的方法,实现功能的修改
    • 要求目标类不能是final的,方法也不能是final的
    • 目标类比较宽松, 只要继承就可以了,在很多的框架中使用

cglib动态代理


导包

		<dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2.2</version>
        </dependency>

jdk动态代理


  • InvocationHandler
    • invoke(): 表示代理对象要执行的功能代码. 你的代理类要完成的功能就写在invoke()方法中

在这里插入图片描述

  • Method类

    • 表示目标类中的方法
    • 通过Method可以执行某个目标类的方法
    • method.invoke(目标对象, 方法的参数)
  • Proxy类

    • 创建代理对象.
    • 使用Proxy类的方法, 代替new的使用
    • Proxy.newProxyInstance()

在这里插入图片描述

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值