zoukankan      html  css  js  c++  java
  • 动态代理

    一、代理模式  

      代理模式是常用的java设计模式,它的特征是代理类和委托类具有相同的接口,代理类负责给委托类预处理消息、过滤消息、传递消息和事后处理消息等。简单的说,就是访问实际对象的时候,通过代理对象来访问的,代理模式就是在访问实际对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。

    二、静态代理

      静态代理在编译期就已经将接口、代理类和被代理类确定下来了。并且一个代理类只能代理一个业务接口的实现类,如果有多个业务接口,需要多个代理类,若代理类对业务方法的预处理和调用后处理是一样的,则多个代理类就会有很多重复代码。

    三、java动态代理

      java动态代理能代理所有实现类的方法调用:根据传过来的业务实现类和方法名进行具体调用。并且动态代理可以对代理类的函数进行统一管理。

      创建JDK动态代理对象的简单实现:

      根据java.lang.reflect包下提供的Proxy类和InvocationHandler接口可以生成JDK动态代理类和动态代理对象。

        1. //首先创建与代理对象关联InvocationHandler对象

        2. //使用Proxy类的静态方法getProxyClass动态创建一个代理类

        

        3. //使用反射获取代理类的带InvocationHandler类型参数的构造函数

        4. //通过构造器创建一个实例对象(代理对象)

      其中,InvocationHandler对象相当于一个中介类对象,代理对象在调用自己方法的时候,会根据自己持有的中介类对象调用中介类对象的invoke方法,中介类对象又根据自己持有的被代理对象来调用被代理对象的方法,从而达到代理

    执行被代理对象的方法。也就是说,动态代理就是通过中介类实现了具体的代理功能。

  • 相关阅读:
    php递归无限分类、根据子类获取所有顶类
    PHP+Redis 有序集合实现 24 小时排行榜实时更新
    php操作redis常用方法代码示例
    Mysql 数据库默认值选 ''" 、Null和Empty String的区别
    linux查看端口占用情况
    php获取微信openid
    phpstorm 删除空行
    git常用操作命令归纳
    Redis数据类型
    渴求式加载指定字段、加载多个关联关系、嵌套的渴求式加载、带条件约束的渴求式加载
  • 原文地址:https://www.cnblogs.com/lmmblogs/p/9364563.html
Copyright © 2011-2022 走看看