IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java设计模式之JDK动态代理 -> 正文阅读

[Java知识库]Java设计模式之JDK动态代理

JDK动态代理是java.lang.reflect.*包提供的方式,它必须借助一个接口才能产生代理对象

代理模式过程:客户(调用者)想要开发一款软件,首先找到软件公司的业务代表(代理对象),代表公司对需求进行谈判,确定哪些需求能做,哪些不能做(代理逻辑处理),最终将能做的需求交给开发者(真实对象),开发者再对需求进行设计开发(真实对象的方法)

  • 创建接口类

public interface helloWorld {
????public void sayHello();
}

  • 实现接口类方法

public class helloWorldImpl implements helloWorld {
????@Override
????public void sayHello() {
????????System.out.println("Hello World");
????}
}

  • 创建代理类

代理类包含两个步骤:

  1. 建立代理对象与真实对象之间的关系
  2. 实现代理逻辑方法

? ? ? 代理类需要实现java.lang.reflect.InvocationHandler接口里的invoke方法,并在invoke方法里编写处理逻辑

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class jdkExample implements InvocationHandler {
????// 真实对象
????private Object target =null;
????/**
?????* 建立代理对象与真实对象的代理关系
?????* @ param targetObject真实对象
?????* @ return 代理对象
?????*/
?public Object bind(Object targetObject){
????this.target=targetObject;//保存真实对象
????return?Proxy.newProxyInstance(target.getClass().getClassLoader(),

target.getClass().getInterfaces(),this);

//返回代理对象,this表示当前对象
????}

????/**
?????*代理方法逻辑处理
?????* @param proxy 代理对象
?????* @param method 当前调度方法
?????* @param args 当前方法参数
?????* @return 返回代理结果
?????* @throws Throwable 异常
?????*/
????@Override
????public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
????????System.out.println("进入代理逻辑方法");
????????System.out.println("在调度真实对象之前的服务");
????????Object obj = method.invoke(target, args);
????????System.out.println("在调度真实对象之后的服务");
????????return obj;
????}
}

  • 编写测试类

public class testJdkProxy {
???public static void main(String[] args){
??????jdkExample jdkExample = new jdkExample();
??????helloWorld proxy = (helloWorld)jdkExample.bind(new helloWorldImpl());//绑定代理对象与真实对象的关系
??????proxy.sayHello();//通过代理对象调用真是对象的方法
????}
}

  • 运行结果

?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-05 17:11:57  更:2021-08-05 17:14:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/12 1:51:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码