瓜子二手車,沒有中間商賺差價。市場需求決定商業模式。
代理是多麼痛的領悟,但是我們确實基本沒有用到,隻是我們用的架構肯定一直在用,被封裝了。
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);
}
}
代理類的具體功能和特性,後續補充……