瓜子二手车,没有中间商赚差价。市场需求决定商业模式。
代理是多么痛的领悟,但是我们确实基本没有用到,只是我们用的框架肯定一直在用,被封装了。
mybatis核心就有代理,但是不一定是JDK自带的代理工具,代理的核心游戏规则就是运行时按需加载类,调用方法。
package com.wht.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import java.util.Arrays;
import java.util.Random;
public class ProxyTest {
public static void main(String[] args) {
Object[] elements = new Object[100000];
for (int i = 0; i < elements.length; i++) {
Integer value = i + 1;
InvocationHandler handler = new TraceHandler(value);
Object proxy = Proxy.newProxyInstance(null, new Class[]{Comparable.class}, handler);
elements[i] = proxy;
}
Integer key = new Random().nextInt(elements.length) + 1;
int result = Arrays.binarySearch(elements, key);
if (result >= 0) {
System.out.println(elements[result]);
}
}
}
package com.wht.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class TraceHandler implements InvocationHandler {
private Object target;
public TraceHandler(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.print(target);
System.out.print("."+method.getName()+"(");
if(args!=null){
for (int i = 0; i <args.length ; i++) {
System.out.print(args[i]);
if(i<args.length-1){
System.out.print(",");
}
}
}
System.out.println(")");
return method.invoke(target,args);
}
}
代理类的具体功能和特性,后续补充……