美文网首页
解析java反射和动态代理

解析java反射和动态代理

作者: 积跬步以致千里_ylc | 来源:发表于2020-08-07 09:51 被阅读0次

反射定义

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

  1. 理解反射的概念,反射之中包含了一个「反」字,所以了解反射我们先从「正」开始。
    1.1)一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的。于是我们直接对这个类进行实例化,之后使用这个类对象进行操作。
    image.png
    1.2)反射则是一开始并不知道我要初始化的类对象是什么(或者是第三方的类没有提供对外的构造方法等情况),自然也无法使用 new 关键字来创建对象了。这时候,我们使用 JDK 提供的反射 API 进行反射调用
    image.png
    测试类:
ppackage animal;
public class Dog {
    private String name;
    private int age;
    private Dog() {
        this.name = "dav";
        this.age = 2;
    }
    public Dog(String name) {
        this.name = name;
    }
    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }    
    public void eat(String food) {
        System.out.println("dog " + name + " eat " + food);
    }
    private void sleep(int hours) {
        System.out.println("dog " + name + " sleep " + hours + " hours");
    }
}

反射的相关操作

反射的基本使用

代理模式定义

给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用。目的:
(1)通过引入代理对象的方式来间接访问目标对象,防止直接访问目标对象给系统带来的不必要复杂性。
(2)通过代理对象对原有的业务增强。


image.png
  • 静态代理
    一个代理对象和真实对象 存在一个确定关系(一对一 或者 一对多)即是代理对象中的真实对象是确定的。(违反开闭原则,扩展能力差,可维护性差)
    公共接口
    真实对象
    代理对象
    访问者
  • 动态代理:是指在使用时再创建代理类和实例
    1)优点:只需要1个动态代理类就可以解决需要创建多个静态代理才能处理的问题,避免重复、多余代码,更强的灵活性
    2)缺点:效率低,相比静态代理中 直接调用目标对象方法,动态代理则需要先通过Java反射机制,从而间接调用目标对象方法。
    3)应用场景局限:因为 Java 的单继承特性(每个代理类都继承了 Proxy 类),即只能针对接口 创建 代理类,不能针对类创建代理类。在java的动态代理机制中,有两个重要的类或接口,一个是InvocationHandler接口、另一个则是 Proxy类,这个类和接口是实现我们动态代理所必须用到的。
    InvocationHandler接口是给动态代理类实现的,负责处理被代理对象的操作的,而Proxy是用来创建动态代理类实例对象的,因为只有得到了这个对象我们才能调用那些需要代理的方法。

4)动态代理实现原理: 通过 Proxy.newProxyInstance()方法动态生成一个代理类(这个动态生成的代理类 实现是被代理类 实现的接口),并缓存。用户获取到这个代理类后 调用接口中的方法会走到 invoke 方法中,最后由被代理类的具体实现类来操作方法。(所以动态代理类中需要实现invocationHandler接口,并完成invoke方法的反射调用)
5)实现范例

公共接口1
公共接口2
接口2的真实实现
接口1的真实实现
动态代理类实现
动态代理的使用

相关文章

  • 一文带你搞懂Java反射和动态代理

    分享 Java反射和动态代理

  • Java基础:反射

    反射注解动态代理相关阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 ...

  • 安卓反射和动态代理的应用

    提纲 java反射基础 反射在Android中的应用 Java动态代理 动态代理在Android的应用 java反...

  • 解析java反射和动态代理

    反射定义 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能...

  • 2021校招 复习总结

    笔记导航: JAVA: 泛型 反射和动态代理 注解 JAVA多线程 ReentrantLock,Volatile,...

  • Spring笔记

    1.Spring用到的动态代理分为java动态代理和CGILB动态代理,相同点是都是通过反射机制创建运行时被代理类...

  • Java 动态代理

    前言 关于动态代理 JDK动态代理 CGLIB动态代理 区别 java动态代理是利用反射机制生成一个实现代理接口的...

  • Java反射机制详解(二)

    本篇文章继续介绍Java反射机制,不同的是侧重于介绍动态代理。动态代理是代理模式中的一种,是通过Java反射机制来...

  • Java反射机制总结(二)

    本篇文章继续介绍Java反射机制,不同的是侧重于介绍动态代理。动态代理是代理模式中的一种,是通过Java反射机制来...

  • 面试刷题6:反射和动态代理是什么?

    反射和动态代理是什么? 反射是java提供的一种自省能力,可以在运行时创建类的实例,访问成员变量,方法。 动态代理...

网友评论

      本文标题:解析java反射和动态代理

      本文链接:https://www.haomeiwen.com/subject/qszzrktx.html