java的代理和动态代理简单测试
什么叫代理与动态代理?
1.以买火车票多的生活实例说明。
因为天天调bug所以我没有时间去火车票,然后就给火车票代理商打电话订票,然后代理商就去火车站给我买票。就这么理解,需要我做的事情,代理商帮我办了,但是需要出手续费。
废话不说了,直接上java代码吧!
java动态代理
//接口 (抽象买票的事情)
public interface ICalc {
public int add(int i, int j);
}
//实现这个接口 (具体到我买票的事情)
public class CalcImpl implements ICalc {
@Override
public int add(int i,int j) {
int result = i + j;
return result;
}
}
//动态创建代理对象 (代理商具备买票的能力,只要我打电话就可以了)
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Arrays;
public class CalcLoggingProxy implements InvocationHandler {
//被代理对象
private ICalc target;
public CalcLoggingProxy(){}
public CalcLoggingProxy(ICalc obj){
target = obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {
String methodName = method.getName();
//日志
System.out.println("invoke...before---> "+methodName+"---"+Arrays.asList(args));
//执行方法
Object result = method.invoke(target,args);
//日志
System.out.println("invoke...after---->"+result);
return result;
}
public static Object factory1(ICalc target)
{
//获取被代理对象的Class
Class cls = target.getClass();
//代理对象由哪一个类加载器负责
ClassLoader loader = cls.getClassLoader();
//代理对象的类型,即其中有哪些方法
Class [] interfaces = new Class[]{ICalc.class};
//当调用代理对象的方法时执行该代码--->先给代理对象赋值--->自动调用invoke();
InvocationHandler handler = new CalcLoggingProxy(target);
//返回代理对象的实例
return Proxy.newProxyInstance(loader,interfaces,handler);
}
}
//测试 (我就打了个电话去订票)
public class ProxyTest {
public static void main(String[] args) {
ICalc target = new CalcImpl();
ICalc calcproxy = (ICalc) CalcLoggingProxy.factory1(target);
int result = calcproxy.add(2, 4);
System.out.println(result);
}
}
//测试效果 (然后就有票了)
invoke...before---> add---[2, 4]
invoke...after---->6
6
java的代理和动态代理简单测试的更多相关文章
- java:java静态代理与动态代理简单分析
java静态代理与动态代理简单分析 转载自:http://www.cnblogs.com/V1haoge/p/5860749.html 1.动态代理(Dynamic Proxy) 代理分为静态代理和动 ...
- java静态代理与动态代理简单分析
原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5860749.html 1.动态代理(Dynamic Proxy) 代理分为静态代理和动态代理 ...
- Java Proxy和CGLIB动态代理原理
动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询.测试框架的后端mock.RPC,Java注解对象获取等.静态代理的代理关系在编译时就确定了,而动态代理的代理关 ...
- java之静态代理和动态代理
我们以几个问题,来开始我们今天的学习,如果下面几个问题,你都能说出个一二,那么恭喜你,你已经掌握了这方面的知识.1,什么是代理模式?2,Java中,静态代理与动态代理的区别?3,Spring使用的是J ...
- java代理:静态代理和动态代理
一.Java中有一个设计模式是代理模式 代理模式是常用的Java设计模式,特征是代理类与委托类有相同的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等. 代理类 ...
- JAVA静态代理和动态代理理解
代理 代理是英文 Proxy 翻译过来的.我们在生活中见到过的代理,大概最常见的就是朋友圈中卖面膜的同学了. 她们从厂家拿货,然后在朋友圈中宣传,然后卖给熟人. 按理说,顾客可以直接从厂家购买产品,但 ...
- Java中的JDK动态代理
所谓代理,其实就是相当于一个中间人,当客户端需要服务端的服务时,不是客户直接去找服务,而是客户先去找代理,告诉代理需要什么服务,然后代理再去服务端找服务,最后将结果返回给客户. 在日常生活中,就拿买火 ...
- Java核心技术点之动态代理
本篇博文会从代理的概念出发,介绍Java中动态代理技术的使用,并进一步探索它的实现原理.由于个人水平有限,叙述中难免出现不清晰或是不准确的地方,希望大家可以指正,谢谢大家:) 一.概述 1. 什么是代 ...
- 【Java】代处理?代理模式 - 静态代理,动态代理
>不用代理 有时候,我希望在一些方法前后都打印一些日志,于是有了如下代码. 这是一个处理float类型加法的方法,我想在调用它前打印一下参数,调用后打印下计算结果.(至于为什么不直接用+号运算, ...
随机推荐
- 我对Web开发的认识
前端 使用mvvm框架,每个视图维护自己的数据模型,更专注于视图模型及状态,在框架的帮助下规范视图与后端的交互及减轻工作量 我的选择是avalon.js 解耦前后端开发 自有资源独立管理,向后端开放资 ...
- R语言如何将字符串转变为命令执行
这里用到 eval() 和 parse() 函数.首先使用 parse() 函数将字符串转化为表达式(expression),而后使用 eval() 函数对表达式求解.x <- 1:10a &l ...
- android 在HTML中显示bitmap
逻辑:将bitmap转化为Base64,通过调用HTML中的JS,显示到HTML中 (1)android代码 public String bitmaptoString(Bitmap bitmap) { ...
- windows下 删除指定文件夹里面一周前的所有文件和文件夹的bat
forfiles /p "指定文件夹路径" /m * /s /d -7 /c "cmd /c if @isdir==TRUE (rd /q @path) else del ...
- ACTIVE NEURAL LOCALIZATION
用贝叶斯滤波器定义状态,用rl帮助定位. 这个方法需要对地图和角度进行离散化,当地图很大,角度较精细时,输出会很大,所以不太可能用到大地图,高精度角度的任务上.
- Ubuntu18.04 + cuda9.0+cudnn7.0
1 cannot find Toolkit in /usr/local/cuda-8.0 2017年05月27日 17:37:33 阅读数:2754 对于新版本ubuntukylin17.04安装C ...
- Axiom3D:资源引用与加载基本流程.
Archive:对应文件夹位置,包含文件夹,压缩文件,网络位置,包含Load,Unload,Open,Create,Remove,FineFile等主要虚方法,用于对应各具体Archive来实现. R ...
- 如何在Windows 10安装和使用Linux的Bash shell
转载自:百度经验 Windwos 10 的周年更新为开发人员提供一个大的新功能:一个完整的,基于Ubuntu的Bash shell中,可以直接在Windows上运行Linux软件. 这使得“Linux ...
- c递归程序
递归 long recursin(int); void main() { int n; long result; printf("input a integer number: \n&quo ...
- 转载:案例用Excel对会员客户交易数据进行RFM分析
案例:用Excel对会员客户交易数据进行RFM分析 背景: 一个会员服务的企业,有近1年约1200个会员客户的收银数据.由于公司想针对不同 ...