博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态代理示例
阅读量:5926 次
发布时间:2019-06-19

本文共 1838 字,大约阅读时间需要 6 分钟。

hot3.png

package proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.lang.reflect.Proxy;public class ProxyDemo {	public static void main(String[] args) {		ILoadData mysqlHandler = new LoadDataToMysql();		ILoadData handler = LoadDataHandler.newInstance(mysqlHandler, new DataMetrics());		handler.loadData("load data");	}	}class LoadDataHandler  {	public static ILoadData newInstance(ILoadData handler, DataMetrics metrics) {		return (ILoadData) Proxy.newProxyInstance(handler.getClass()				.getClassLoader(), new Class[] { ILoadData.class },				new DataMetricsProxy(handler, metrics));	}	private static class DataMetricsProxy implements InvocationHandler {		private final ILoadData handler;		private final DataMetrics metrics;		private DataMetricsProxy(ILoadData handler, DataMetrics metrics) {			this.handler = handler;			this.metrics = metrics;		}		@Override		public Object invoke(Object proxy, Method m, Object[] args)				throws Throwable {			Object result;			try {				long start = now();				result = m.invoke(handler, args);				int processTime = (int) (now() - start);				metrics.incMethodTime(m.getName(), processTime);			} catch (InvocationTargetException e) {				throw e.getTargetException();			} catch (Exception e) {				throw new RuntimeException("unexpected invocation exception: "						+ e.getMessage());			}			return result;		}	}	private static long now() {		return System.nanoTime();	}}interface ILoadData {	public void loadData(String data);}class LoadDataToMysql implements ILoadData {	@Override	public void loadData(String data) {		System.out.println("load data to mysql");	}}class DataMetrics {	public void incMethodTime(String name, long time) {		System.out.println(name + "," + time);	}}

转载于:https://my.oschina.net/cloudcoder/blog/341989

你可能感兴趣的文章
各变量字节数
查看>>
activemq安全设置 设置admin的用户名和密码
查看>>
卡包模板
查看>>
自适应布局
查看>>
读取数量不定的输入数据
查看>>
选择器
查看>>
GoLang学习笔记——data_type
查看>>
清净布气门功夫介绍
查看>>
c++的进制转换函数
查看>>
[1197]约瑟夫问题 (循环链表)SDUT
查看>>
video.js html5 视频播放器
查看>>
CodeForces 486C Palindrome Transformation 贪心+抽象问题本质
查看>>
求最小公倍数
查看>>
Java中的String,StringBuilder,StringBuffer三者的区别
查看>>
BZOJ1823:[JSOI2010]满汉全席——题解
查看>>
游戏上线... 记录下...
查看>>
ES6入门之Symbol
查看>>
SQLite.NET (32位) 在64位环境中无法正常调试
查看>>
Aspnetpage ie10下 __dopost方法未找到 不能翻页的问题
查看>>
数学知识在游戏中的运用
查看>>