Java proxy 子类代理
Producer.java
package com.claroja.cglib;/*** 一个生产者*/
public class Producer {/*** 销售* @param money*/public void saleProduct(float money){System.out.println("销售产品,并拿到钱:"+money);}/*** 售后* @param money*/public void afterService(float money){System.out.println("提供售后服务,并拿到钱:"+money);}
}
Client.java
package com.claroja.cglib;import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;import java.lang.reflect.Method;/*** 模拟一个消费者*/
public class Client {public static void main(String[] args) {final Producer producer = new Producer();/*** 动态代理:* 特点:字节码随用随创建,随用随加载* 作用:不修改源码的基础上对方法增强* 基于子类的动态代理:* 涉及的类:Enhancer* 提供者:第三方cglib库* 如何创建代理对象:* 使用Enhancer类中的create方法* 创建代理对象的要求:* 被代理类不能是最终类* create方法的参数:* Class:字节码* 它是用于指定被代理对象的字节码。** Callback:用于提供增强的代码* 它是让我们写如何代理。我们一般都是些一个该接口的实现类,通常情况下都是匿名内部类,但不是必须的。* 此接口的实现类都是谁用谁写。* 我们一般写的都是该接口的子接口实现类:MethodInterceptor*/Producer cglibProducer = (Producer)Enhancer.create(producer.getClass(), new MethodInterceptor() {/*** 执行北地阿里对象的任何方法都会经过该方法* @param proxy* @param method* @param args* 以上三个参数和基于接口的动态代理中invoke方法的参数是一样的* @param methodProxy :当前执行方法的代理对象* @return* @throws Throwable*/@Overridepublic Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {//提供增强的代码Object returnValue = null;//1.获取方法执行的参数Float money = (Float)args[0];//2.判断当前方法是不是销售if("saleProduct".equals(method.getName())) {returnValue = method.invoke(producer, money*0.8f);}return returnValue;}});cglibProducer.saleProduct(12000f);}
}
Java proxy 子类代理相关推荐
- 深入理解Java Proxy和CGLIB动态代理原理
点击上方关注,每天进步一点点 动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询.测试框架的后端mock.RPC,Java注解对象获取等.静态代理的代理关系在编译 ...
- Java Proxy和CGLIB动态代理原理
动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询.测试框架的后端mock.RPC,Java注解对象获取等.静态代理的代理关系在编译时就确定了,而动态代理的代理关 ...
- 【java】深入分析Java反射-动态代理 proxy
1.概述 转载:深入分析Java反射(四)-动态代理 [Java]Java 反射机制浅析 [Java]java代理 静态代理 动态代理 proxy [java]静态代理 proxy 2.动态代理的简介 ...
- java Proxy(代理机制)
我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能,我们更需要学习 ...
- Java设计模式之代理模式(Proxy)
参考http://blog.csdn.net/jianghuxiaoxiami/article/details/3403924 1.代理模式 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的 ...
- Java进阶 | Proxy动态代理机制详解
一.Jvm加载对象 在说Java动态代理之前,还是要说一下Jvm加载对象的过程,这个依旧是理解动态代理的基础性原理: Java类即源代码程序.java类型文件,经过编译器编译之后就被转换成字节代码.c ...
- Proxy 动态代理 InvocationHandler CGLIB MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- java基础---动态代理机制
动态代理的意思是,有一个委托类有一个代理类,让代理类去实现委托类的方法,这样既可以对委托类的代码实现进行封装和隐藏,还能够在委托类的基础上添加额外的一些自定义处理. 两种代理方式 1.jdk原生的代理 ...
- Java中的代理模式
1.什么是代理模式 代理模式:就是为其他对象提供一种代理以控制对这个对象的访问. 代理可以在不改动目标对象的基础上,增加其他额外的功能(扩展功能). 举个例子来说明代理的作用: 一般我们想邀请明星来当 ...
最新文章
- Python编辑器与集成开发环境(IDE)选择
- 遇到Request header is too large,你们是如何解决的?
- 【NLP】经典分类模型朴素贝叶斯解读
- map mybatis 的字段返回0_Mybatis 你踩过坑吗?
- php设计模式 -- 工厂模式
- 1的阶乘在c语言里咋表示,C语言编程求阶乘1到10并分别显示在屏幕上 – 手机爱问...
- markdownpad2 html渲染组件出错_「万字长文」一文吃透React SSR服务端同构渲染
- 序列每天从0开始_序列比对(十一)——计算符号序列的全概率
- 【JS 逆向百例】百度翻译接口参数逆向
- spring cloud微服务_年后进大厂,必备这份微服务面试题:Dubbo+SpringBoot+Cloud
- linux java 环境配置_Linux开发环境配置——java
- StreamingAssets文件夹的读取异常
- Coursera营养学课程考试小抄
- 软件开发工具--自考2019年4月
- 小D课堂 - 新版本微服务springcloud+Docker教程_4-01 常用的服务间调用方式讲解
- 生命在于学习——密码暴力破解
- 细说.NET中的多线程 (六 使用MemoryBarrier,Volatile进行同步)
- 大学网课查题接口平台
- Python报错记录之“list indices must be integers or slices, not str”
- r语言决策树c4.5案例,C4.5主要思想与决策树实例
热门文章
- python爬虫之协程理解爬取照片的简单版
- Python+matplotlib数据可视化设置图例3个精选案例
- 微课|中学生可以这样学Python(例11.3):tkinter通信录管理系统4
- Python线程类首先是一个类
- 小米11全系机型补齐,超大杯压场,但Pro版也不容忽视
- java中路由的使用方法_java – 在camel路由中使用方法作为生产者
- english grammar in use 电子版_③ 采购笔记之节点与凭证、采购的进阶、采购合同要素。(电子版整理中)...
- 力扣59.螺旋矩阵II(JavaScript)
- Java刷新Jpanel_java – 刷新JPanel
- 继承的原理java_Java继承和多态的原理