首页 > 其他分享 >动态代理简单代码

动态代理简单代码

时间:2022-11-14 22:44:35浏览次数:43  
标签:invoke ProxyHandler 代码 Object 代理 denny 动态 public Subject

 

/**
 * 业务接口
 */
public interface Subject {
    void call();
}

 

/**
 * 业务接口的实现(被代理的类)
 */
public class RealSubjcet implements Subject {
    @Override
    public void call() {
        Log.d("denny", "RealSubject#call");
    }
}

 

/**
 * 代理类
 */
public class ProxyHandler implements InvocationHandler {

    private final Object realSubject;

    public ProxyHandler(Object realSubject) {
        this.realSubject = realSubject;
    }

    @Override
    public Object invoke(Object o, Method method, Object[] args) throws Throwable {
        Log.d("denny", "before ProxyHandler#invoke");
        Object result = method.invoke(realSubject, args);
        Log.d("denny", "after ProxyHandler#invoke");
        return result;
    }
}

 

// 通过Proxy创建代理类对象
RealSubjcet realSubjcet = new RealSubjcet();
Subject proxySubject = (Subject) Proxy.newProxyInstance(
        Subject.class.getClassLoader(),
        new Class[]{Subject.class},
        new ProxyHandler(realSubjcet));
proxySubject.call();

以及,最终的结果:

D/denny: before ProxyHandler#invoke

D/denny: RealSubject#call

D/denny: after ProxyHandler#invoke

 

标签:invoke,ProxyHandler,代码,Object,代理,denny,动态,public,Subject
From: https://www.cnblogs.com/zuiniub/p/16890789.html

相关文章

  • 新生第二次考核代码
    A.HFUU(easyversion)字符串#include<stdio.h>chara[100];intn=9,m=32;intmain(){for(inti=0;i<n;i++){scanf("%s",a+1);/......
  • vue + el-menu 动态加载 一二级菜单 侧边栏
    1.HTML<template><divclass="container"><divclass="top">上</div><divclass="main"><!--动态加载侧边栏首先分为可折叠的......
  • 【链接库】静态库与动态库区别?
    在C语言中,函数库分为两种类型,一种是静态库(库程序是直接注入目标程序,不分彼此,库文件通常以.a结尾),另一种为动态库(库程序是在运行目标程序时加载,库文件通常以.so结尾)。文......
  • DOC,PDF,PPT文件转换为HTML代码记录
    pom文件引入<repositories> <repository> <id>com.e-iceblue</id> <url>http://repo.e-iceblue.cn/repository/maven-public/</url> </repository></repositories>......
  • 2022年度国内主流低代码平台介绍
    随着低代码发展越来越迅速,也出现了很多优秀的低代码平台,企业在做技术选型时难免会觉得眼花缭乱,不知该如何选择;现在就跟小编一起来看一下国内那些优秀的低代码平台吧。让......
  • Asterisk realtime 之SIP用户动态写入mysql 数据库(2)
    提供通信服务器和客户端解决方案,包括视频电话,调度系统,会议系统等VOIP行业资讯和技术趋势请参考:www.voip123.cn接上一篇文章,SIP用户写入mysql数据库,asterisk自动查找数......
  • 强化学习代码实战-06 Dueling DQN 算法
    引入优势函数A,优势函数A=状态动作价值函数Q-状态价值函数V。在同一状态下,所有动作的优势值为零。因为,所有的动作的状态动作价值的期望就是状态价值。实现代码:impor......
  • Python代码写得丑怎么办?推荐几个神器拯救你
    Python编程语言需要遵循PEP8规范,但是初学者往往记不住这个规范,代码写得比较丑。本文推荐几个神器来拯救奇丑无边的python代码。一、Jupyternotebook篇Jupyternotebook的......
  • vue input数据动态脱敏
    页面中放两个输入框,一个绑定真实数据、一个绑定脱敏数据,仅展示脱敏数据。<van-fieldv-model="person.cardNo"v-show="false"name="证件号码"......
  • 动态参数
    <script> functioninfo(v1,...data){console.log(v1,data);} info(11);info(11,22);info(11,22,333,444,55);</script><script> functio......