动态代理
public interface Subject{
void doSomething(String str);
}
public class RealSubject implements Subject{
@Override
public void doSomething(String str){
System.out.println("do Something-------->" + str);
}
}
public class DymanicProxy{
public static <T> T newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocathonHandler handler)
{
return (T)Proxy.newInstance(loader,interfaces,handler);
}
}
public class SubjectDymanicProxy extends DymanicProxy{
@Override
public static <T> T newInstance(Subject subject){
ClassLoader classLoader = subject.getClass().getClassLoader();
Class<?>[] classes = subject.getClass().getInterfaces();
InvocationHandler handler = new MyInvocationHandler(subject);
return newProxyInstance(classLoader,classes,handler);
}
}
public class MyInvocationHandler extends InvocationHandler{
private Object target = null;
public MyInvocationHandler(Object _object) {
this.target = _object;
}
@Override
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
return method.invoke(this.target,objects);
}
}
public class Client{
Subject subject = new RealSubject();
Subject proxy = new SubjectDymanicProxy(subject);
proxy.doSomething("完成");
}