package com.eric;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class TestProxy {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//no proxy
BusinessClass bc = new BusinessClass();
//这里应该封装到ClassFactory中
IBusiness bcProxy =(IBusiness) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(),
new Class[]{IBusiness.class}, new InvocationHandler(){
private BusinessClass bcInner =null;
@Override
public Object invoke(Object arg0, Method arg1, Object[] arg2)
throws Throwable {
if(bcInner == null)
bcInner = new BusinessClass();
return arg1.invoke(bcInner, arg2);
}
});
//不使用代理 方法调用前就已经new对象
bc.doBusiness1();bc.doBusiness2();
//使用代理 在方法第一次调用时 new 对象
bcProxy.doBusiness1();
bcProxy.doBusiness2();
}
}
class BusinessClass implements IBusiness{
public BusinessClass(){
System.out.println("BusinessClass constructor.");
}
public void doBusiness1(){
System.out.println("BusinessClass doBusiness1.");
}
public void doBusiness2(){
System.out.println("BusinessClass doBusiness2.");
}
}
interface IBusiness{
void doBusiness1();
void doBusiness2();
}