JDK代理
JDK代理以前性能不怎么樣,但1.6版本卻有很大提升/**
* 行為接口
*
* @author Administrator
*
*/
public interface Study {
public void doStudy();
}
/**
* 目標對象
*
* @author Administrator
*
*/
public class StudyImpl implements Study {
@Override
public void doStudy() {
System.out.println("study jdk proxy");
}
}
/**
* 代理類
* @author Administrator
*
*/
public class JDKProxy implements InvocationHandler {
private Study s;
public JDKProxy(Study s) {
this.s = s;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("before jdkproxy");
method.invoke(s, args);
System.out.println("after jdkproxy");
return null;
}
}
應用中進行調用:
public class Test {
public static void main(String[] args) throws SecurityException,
NoSuchMethodException, IllegalArgumentException,
InstantiationException, IllegalAccessException,
InvocationTargetException {
Class clazz = StudyImpl.class;//獲取目標類的Class對象
Study st = new StudyImpl();//實例化一個目標類
Class proxClass = Proxy.getProxyClass(clazz.getClassLoader(), clazz
.getInterfaces());//通過Proxy靜態方法,獲取一個于目標類實現同樣接口的Class對象,也可以說是兄弟類
Constructor c = proxClass
.getConstructor(new Class[] { InvocationHandler.class });//給這個類一個指定的公開的構造方法
Study ds = (Study) c.newInstance(new Object[] { new JDKProxy(st) });//實例化一個代理類
}
}