Java动态代理

原理

利用反射机制在运行时创建代理类
反射:是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。

代理模式

通俗指为一个目标对象提供一个代理对象,并由代理对象控制对目标对象的引用。使用代理对象,是为了在不修改目标对象的基础上,增强目标对象的业务逻辑。

代理可分为静态代理和动态代理

静态代理

  • 静态:指的是代理类是手动编码创建的
  • 实现:创建一个接口,然后创建被代理的类实现该接口并且实现该接口中的抽象方法。之后再创建一个代理类,同时使其也实现这个接口。在代理类中持有一个被代理对象的引用,而后在代理类方法中调用该对象的方法。

动态代理

  • 动态:指的是代理类是在程序运行时创建的,而不是在程序运行前手动编码来定义代理类的
  • 常用的两种方式:JDK动态代理、CGLIB动态代理
  • 共同点:两种方式都是基于创建字节码的方式来创建代理类
  • 不同点:
    https://www.jianshu.com/p/992dfcecff34
    1、JDK动态代理只能代理实现了接口的类(因为JDK动态代理最终生成的代理类需要继承Proxy类,通过Proxy类的成员InvocationHandler来调用增强的方法,由于Java不支持多继承,因此无法对没有实现接口的类通过继承的方式进行代理)
    https://blog.csdn.net/jiankunking/article/details/52143504
    2、CGLIB动态代理可以代理任何非final类的非final方法,通过生成目标类的子类,即通过继承的方式来实现对于目标方法的增强
    https://blog.csdn.net/yhl_jxy/article/details/80633194

你可能感兴趣的:(Java动态代理)