Java动态代理:
一、代理模式
二、代理实现方式
1、被代理对象
public interface Target {
public void doSomething();
public void doOtherthing();
}
public class TargetImpl implements Target {
@Override
public void doSomething() {
System.out.println("doing someting");
}
@Override
public void doOtherthing() {
System.out.println("doing otherthing");
}
}
2、拦截器
public interface Interceptor {
public void before();
public void after();
}
public class TargetInterceptor implements Interceptor {
@Override
public void after() {
System.out.println("after");
}
@Override
public void before() {
System.out.println("before");
}
}
3、拦截器和被代理类的粘合剂
public class TargetHandler implements InvocationHandler {
private Interceptor interceptor;
private Object target;
public void setInterceptor(Interceptor interceptor)
{
this.interceptor = interceptor;
}
public void setTarget(Object target)
{
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable
{
interceptor.before();
Object result = method.invoke(target, args);
interceptor.after();
return result;
}
}
4、动态代理类
public class DProxy {
TargetHandler h = new TargetHandler();
public Object createDProxy(Object target, Interceptor interceptor) {
h.setTarget(target);
h.setInterceptor(interceptor);
return Proxy.newProxyInstance(Target.class.getClassLoader(), target
.getClass().getInterfaces(), h);
}
}
5、测试代码
public class TestInterceptor {
/**
* @param args
*/
public static void main(String[] args) {
Target target = new TargetImpl();
Interceptor interceptor = new TargetInterceptor();
DProxy p = new DProxy();
Target ptarget = (Target)p.createDProxy(target, interceptor);
ptarget.doSomething();
ptarget.doOtherthing();
}
}