动态代理简单例子

11 动态代理的例子 NULL 博文链接:https://elf8848.iteye.com/blog/351078 立即下载

导入jar包
这里写图片描述

/*
 * 
 * 一个演员
 * 
 * 
 */


public class Actor implements IActor {

    /*
     * 基本的演出
     */
    public void basicAct(float money){
    System.out.println("拿到钱"+money+",开始基本演出");
    }

    public void dangeAtc(float money){
    System.out.println("拿到钱"+money+",开始危险演出");
    }


}
/*
 * 模拟经纪公司对签约演员的标准
 * 
 */

public interface IActor {
    /*
     * 基本的演出
     */
    public void basicAct(float money);

    public void dangeAtc(float money);
}
/*
 * 
 * 模拟一个剧组
 */

public class Client {
    public static void main(String[] args) {
    /*
     * 动态代理:
     *  作用:在不改变源码的基础上,对已有方法的增强(他是AOP思想的实现技术)
     *  分类:
     *      基于接口的动态代理:
     *      要求:被代理类至少实现一个接口
     *      提供者:JDK官方
     *      涉及类:Proxy
     *       创建代理对象的方法:Proxy.newProxyInstance(Classloader, Class[], InvocationHandler);
     *      Classloader:类加载器,
     *      Class[]:字节码数组,被代理类实现的接口.(要求代理对象和被代理对象有相同的方法)
     *      InvocationHandler:一个接口,用于提供增强代码.
     *      策略模式:
     *         
     *      
     *      
     * 
     */
    /*
     * 找一个演员
     */
    final Actor actor = new Actor();

    IActor proxyActor = (IActor) Proxy.newProxyInstance(actor.getClass().getClassLoader(),actor.getClass().getInterfaces(),new InvocationHandler() {
        /*
         * 执行被代理对象的任何方法都会经过该方法
         * 方法的参数:
         *      代理对象的引用
         *      当前执行的方法
         *      当前执行的方法的参数
         * 
         */

        @Override
        public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        Object rtValue = null;
        //取出方法的参数
        float money = (float)args[0];
        //判断当前执行的是什么方法
        if("basicAct".equals(method.getName())){
            //基本演出
            if(money>10000){
            //剧组抽查一半金额
            money = money/2;
            //执行方法:演出
            rtValue = method.invoke(actor, money);
            }
        }
        if("dangeAtc".equals(method.getName())){
            //危险演出
            if(money>50000){
            //剧组抽查一半金额
            money = money/2;
            //执行方法:演出
            rtValue =  method.invoke(actor, money);
            }
        }
        return rtValue;
        }
    });

    proxyActor.basicAct(10005);
    proxyActor.dangeAtc(70000);
    }
}

/*
 * 模拟经纪公司对签约演员的标准
 * 
 */

public class IActor {
    /*
     * 基本的演出
     */
    public void basicAct(float money){

    }

    public void dangeAtc(float money){

    }
}
/*
 * 
 * 一个演员
 * 
 * 
 */


public class Actor extends IActor {

    /*
     * 基本的演出
     */
    public void basicAct(float money){
    System.out.println("拿到钱"+money+",开始基本演出");
    }

    public void dangeAtc(float money){
    System.out.println("拿到钱"+money+",开始危险演出");
    }


}
/*
 * 
 * 模拟一个剧组
 */

public class Client {
    public static void main(String[] args) {
    /*
     * 基于子类的动态代理
     *  要求:被代理类不能是最终类,不能被final修饰
     *  提供者:第三方CGLib
     *  涉及类:Enhancer
     *  创建代理对象的方法:create(Class,Callback)
     *  参数的含义:
     *      Class:被代理对象的字节码.
     *      Callback:如何代理
     */
    /*
     * 找一个演员
     */
    Actor actor = new Actor();


    Actor cglibActor =  (Actor) Enhancer.create(actor.getClass(), new MethodInterceptor() {
        /*
         * 与基于接口的动态代理的方法作用一模一样
         * 参数:
         *       前面三个参数与基于接口的动态代理的方法的参数一样
         *   MethodProxy:当前执行方法的代理对象
         * 
         */
        @Override
        public Object intercept(Object proxy, Method method, Object[] args,
            MethodProxy methodProxy) throws Throwable {
        Object rtValue = null;
        //取出方法的参数
        float money = (float)args[0];
        //判断当前执行的是什么方法
        if("basicAct".equals(method.getName())){
            //基本演出
            if(money>10000){
            //剧组抽查一半金额
            money = money/2;
            //执行方法:演出
            rtValue = method.invoke(actor, money);
            }
        }
        if("dangeAtc".equals(method.getName())){
            //危险演出
            if(money>50000){
            //剧组抽查一半金额
            money = money/2;
            //执行方法:演出
            rtValue =  method.invoke(actor, money);
            }
        }
        return rtValue;
        }

    });
    cglibActor.basicAct(10005);
    cglibActor.dangeAtc(70000);
    }
}
动态代理例子 是一个描述动态代理的实例,用的是反射的方法,感觉还是比较容易理解得 立即下载

相关推荐

机械臂算法设计MATLAB|运动学动力学|轨迹规划|路径规划|Simulink

RRT为最常用的路径规划算法,还有其变种(RRT*,RRT-connect等)。RRT是一种多维空间中高效的规划方法。它以一个初始点作为根节点,通过随机采样增加叶子节点的方式,生成一个随机扩展树。随机扩展树不断增长,直到到达目的位置。**Step1:**构建多维状态空间(joint space),**Step2:**构建joint space的障碍检测算法**Step3:**在joint space应用RRT。

qq_35997213的博客 4476

试着让动态代理变得通俗易懂,通过三个案例

别想的太复杂,就是找一个黄牛。举个最近的例子,周杰伦要开演唱会了,大家需要在大麦上买票,规定买票的规则 是这样的,只能用自己实名制的账号去买票。票和自己的身份证绑定,不能转票。

yfs1024 504

[终于解决]Ubuntu14.04 32位安装移动网卡(0bda:b711)驱动8188gu tplink-WN726n

大致梳理一下问题解决的流程 首先,在台式机做了双系统,台式机只有一个网线接口,由于项目要求,需要占用网口传输数据,所以用之前买的tplink-WN726n免驱版2.0的移动网卡 【note】免驱版只能在Windows下安装使用,在Ubuntu系统中无法使用,所以,需要另辟蹊径。 找了很多资料,尝试很多方法,有的复杂有的简单,终于解决。 【思路】首先在Ubuntu系统中输入lsusb,查看是否检测到USB网卡设备。然后从Github中复制代码,构建,安装,然后modprobe一下,到前面那步还不行,就再来一步

瑞o 1万+

动态代理简单举例(java基础笔记)

代理模式的原理: 使用一个代理将对象包装起来, 然后用该代理对象取代原始对象。任何对原始对象的调用都要通过代理。代理对象决定是否以及何时将方法调用转到原始对象上。 首先拿一个静态代理来看 package com.atwang.java; /** * 静态代理举例 */ interface ClothFactory{ void produceCloth(); } //代理类 class ProxyClothFactory implements ClothFactory{ priva

qq_51368189的博客 798

【嵌入式】树莓派部署NCNN的YOLOv5模型

树莓派部署NCNN框架的YOLOv5模型

Ace_Spade的博客 3785

微信小程序推送微信服务号模板消息

微信小程序中发送微信服务号模板消息,无需用户手动确认订阅,无需绑定开放平台,无需使用UnionId。

qq_20751269的博客 1563

动态代理详解

想要更加透彻的理解动态代理,首先要熟悉下静态代理。

白羊座的橙子 1万+

机器学习预测土壤养分:从电导率、pH到随机森林与神经网络的农业实践

在智慧农业与精准农业领域,机器学习已成为处理复杂农业数据、挖掘潜在规律的关键技术。其核心原理在于通过算法从多维数据中自动学习特征与目标变量之间的映射关系,尤其擅长捕捉非线性关联。这项技术的核心价值在于能够将传统上依赖昂贵、耗时实验室分析的问题(如土壤养分检测),转化为基于易获取传感器数据(如电导率、pH值)的快速、低成本预测任务,为农业生产的实时决策与资源优化提供了全新可能。其典型应用场景包括作物生长监测、产量预测以及精准施肥管理等。本文聚焦于利用随机森林和神经网络等回归算法,构建通过土壤物理参数预测氮磷钾

weixin_33693070的博客 670

代理模式例子

1.概念代理模式就是为某个对象提供一种代理,以控制对这个对象的访问。2.涉及角色抽象角色:声明真实对象和代理对象的共同接口; 代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。 真实角色:代理角色所代表的真实对象,是我们最终要引用的

Programming is an art form. 4497

Linux显卡管理避坑指南:为什么Xorg总是占用你的NVIDIA GPU?

本文深入解析了在Linux系统上,尤其是双显卡笔记本中,Xorg显示服务器进程占用NVIDIA GPU的根本原因。文章从Xorg的驱动加载机制和NVIDIA驱动的独占性入手,详细对比了禁用配置文件、手动配置xorg.conf、使用官方PRIME方案以及切换到Wayland等主流解决方案的优缺点与适用场景,旨在帮助用户有效释放GPU资源,确保深度学习、游戏等计算任务能独占显卡性能。

xgboost6farmer的博客 271

达梦数据守护集群监视器详解与应用指南

主库/备库:承担读写和只读服务的数据节点Redo 日志:记录数据库变更的核心日志Redo 日志传输:主备库间的日志同步机制Redo 日志重演:备库重做日志的应用过程守护进程 (dmwatcher):实例级别的监控和管理组件监视器 (dmmonitor):集群级别的监控和管理工具监视器作为数据守护系统的重要组成部分,提供了集群监控、故障管理和状态确认等关键功能。达梦数据守护集群监视器是维护数据库高可用性的关键工具。

huanhuanzhou blog 1058

动态代理模式代码示例

一. 抽象接口 package designpattern.proxy.dynamicproxy; /** * 接口:租房 * jdk动态代理/cglib动态代理 */ public interface IRentingHouse { void rentHosue(); } 二. 被代理对象 package designpattern.proxy.dynamicproxy; import designpattern.proxy.dynamicproxy.IRentingHouse

舞鹤白沙编码日志 434

4.Simulink基础建模操作——加减乘除运算

加减乘除运算

FPGA/MATLAB学习教程/源码/项目合作开发 9553

java自身的动态代理简单例子。

动态代理方式有好几种:一种一种来吧 第一种 spring Aop 见博客中找 第二种  jdk自身的, ================================================================================================= == import java.lang.reflect.InvocationHan

faicm的专栏 424

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

动态代理-一个简单例子

java编程思想,动态代理

陈挖机的博客 220

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

一个简单的动态代理例子

读《深入理解Java虚拟机》第三版,周志明著。 import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * @author hyl * @version v1.0: DynamicProxyTest.java, v 0.1 2020/9/3 19:45 $ */ public class DynamicProxyTest { .

CrazyTiger的博客 369

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

基于接口的动态代理简单例子介绍

动态代理有两种方法: 通过接口的动态代理和基于子类的动态代理,第一种是基于接口的: package com.itheima.proxy; /** * 一个生产者 */ public class Producer implements IProducer { public void saleProduct(float money) { System.out.println("销售产品,并拿到钱:"+ money); } public void afterServ

qq_18214415的博客 243

4.4-Spring框架——简单例子理解jdk和cglib动态代理

简单例子理解jdk和cglib动态代理 回到第一章:目录 文章目录简单例子理解jdk和cglib动态代理前言一、工程例子1、代码结构2、jdk的动态代理3、cglib动态代理3、小结 前言 动态代理:是java在运行时,动态生成代理对象,实现对目标对象的方法进行扩展(增强)。 java有2种动态代理实现方法: jdk动态代理:要被代理的目标对象必须实现某个接口。动态代理的原理是动态生成一个和目标对象实现了相同接口的 代理对象。这个代理对象和被代理对象是兄弟关系。增强后的方法,通过反射调用实现。 cgl

川流不息 535

java动态代理类简单例子

/**  * jdk动态代理类必须要有接口,所以首先创建一个接口  *  */ public interface Dan { public String add(); } /**  *   * 创建代理对象  *  */ class my implements InvocationHandler{      public Object invoke(Object p

Luo_cheng_yibuzhiyao的博客 440

基于子类的动态代理简单例子介绍

package com.itheima.cglib; import com.itheima.proxy.IProducer; /** * 一个生产者 */ public class Producer { public void saleProduct(float money) { System.out.println("销售产品,并拿到钱:"+ money); } public void afterService(float money) {

qq_18214415的博客 195

【代理模式】动态代理-简单例子

动态代理的一个简单例子

水w的博客 1044

cglib动态代理简单的例子

== package faicm.agent.cglib; /** * 这个是没有实现接口的实现类 * * @author student * */ public class PersonDoImpl { public void addPerson() { System.out.println("增加图书的普通方法..."); } } == package f

faicm的专栏 573

java动态代理--一个简单的例子

这几天看视频看到了java的动态代理,这里写一个小例子。在写例子的时候发现:认为自己会了,和能写出来真不是一个概念。还是要多写代码,然后写博客再深入一些,费曼学习法--教,是最好的学。 1.什么是动态代理 代理模式  代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通

Heyeverybody的博客 3131

还不清楚JDK动态代理?从简单例子到源码再到字节码讲给你听

一、前言 Spring中的AOP思想就是对代理模式的经典运用,下面先讲讲代理模式的核心思想,以静态代理为例。 二、静态代理示例 下面有这样一个例子,委托人在遭遇利益受损的时候,可以委托律师帮忙打官司。 先定义一个描述行为的接口: package com.design.proxy.statics; public interface Action { void handle(); } 委托人,实现这个接口,主要的行为是寻找律师。 package com.design.proxy.s

阳阳的博客 1098

JAVA动态代理实现aop的简单例子

aop是面向切面编程,是对OO面向对象思想的补充。 下面的例子的利用动态代理实现简单的AOP不用引入任何jar包,spring的AOP的实现原理就是动态代理。 相关java类: 1、业务处理接口 package sinosoft.dj.aop.proxyaop; public interface IHello {       /**      * 业务处理A方法    

梦想起飞的地方......... 1130
上一篇: cglib org.objectweb.asm.ClassWriter.<init>
下一篇: 爬虫小程序--翻译器
QEcode
博客等级 码龄10年 39粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值