yuyee

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) });//实例化一个代理类
}
}

posted on 2010-10-25 00:20 羔羊 阅读(162) 评论(0)  编辑  收藏 所属分类: aop