11.JAVA代理模式概括

Java代理模式

Java中的代理表示对某个对象的一种代理模式,可以有效控制用户不能直接使用此对象。代理机制可以使某个对象的业务功能实现的一种隐藏,在不改变源数据的情况下,有利于对应用程序进行扩展或升级

代理可以看作是一种AOP模式的实现

代理模式中对象之间存在的结构

  1. 抽象接口:代理对象和目标对象共同实现的接口

  2. 代理实现对象:对目标对象的业务功能进行渲染或限制

  3. 目标代理对象:用户实际要访问的源对象

Java代理模式主要分为静态代理和动态代理的设计模式

 

一、静态代理

静态代理的特性

  1. 代理角色和真实角色的代理关系为共同实现某个接口

  2. 一个真实对象对应一个代理对象

  3. 真实对象的实现必须存在,目标代理对象则固定不变

静态代理的代理关系较为清晰,但是若由多个真实对象则需要新建更多的代理对象,因此增加Java的内存

 

Java静态代理模式流程图

 

二、动态代理

动态代理采用Java中的代理组件实现代理的功能

动态代理的特性

  1. 相对于静态代理,动态代理的业务代码无需作修改且固定,不会因为应用程序的扩展和升级而变得臃肿

  2. 在程序运行中,可以根据目标对象类型的不同,代理对象的代理类型发生改变

  3. 实现AOP编程更加灵活,这是静态代理无法代替的

 

InvocationHandler组件

InvocaticonHandler组件是java.lang.reflect反射包下的创建代理对象方法调用的规范接口

任意普通类实现InvocationHandler接口来重写代理对象方法

通过类反射原理来获取当前代理对象实现的方法

 

实现代理对象中的方法

/**
 *invoke 实现动态代理的方法
 * @param proxy 指定被代理对象的实例
 * @param method 指定被代理对象的实例方法
 * @param args 指定传递给目标方法的参数 没有则指定为null
 * @return 指定方法的返回值
 * @throws Throwable
 */
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {}

 

Proxy组件

Proxy组件是java.lang.reflect包下用于创建代理对象的实例和静态方法

通过Proxy反射的对象来调用当前代理对象实现的接口方法

 

创建Proxy对象的方法

通过调用Proxy的静态方法进行创建

Object Proxy.newProxyInstance(ClassLoader, Class [] interfaces , Invocationhandler)

传入的参数

  • ClassLoader 指定当前目标对象的类加载器

  • interfaces 当前目标对象实现的所有接口数组

  • Invocationhandler 当前代理对象调用方法的实例

  • return 为所有动态代理类的超类

 

posted @ 2022-05-08 22:13  海涛布克  阅读(31)  评论(0编辑  收藏  举报