6.1拦截器动态代理
6.1.1建立被代理对象接口
package com.lei.interceptor;
public interfaceTargetInterface {
public void Something();
}
6.1.2建立被代理对象
package com.lei.interceptor;
public classTarget implementsTargetInterface {
@Override
public void Something() {
// TODO Auto-generated method stub
System.out.println("do something");
}
}
6.1.3建立拦截器类
package com.lei.interceptor;
public classInterceptor {
public void before(){
System.out.println("before");
}
public void after(){
System.out.println("after");
}
}
6.1.4建立处理器类
package com.lei.interceptor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
*@author renlei
*真正的处理器
*/
public class MyHandler implementsInvocationHandler{
privateObject object ;
privateInterceptor interceptor = new Interceptor();
publicObject getObject() {
returnobject;
}
publicvoid setObject(Object object) {
this.object= object;
}
@Override
publicObject invoke(Object proxy, Method method, Object[] args)
throwsThrowable {
//TODO Auto-generated method stub
Objectresult = null;
interceptor.before();
result= method.invoke(object, args);
interceptor.after();
returnresult;
}
}
6.1.5产生动态代理
package com.lei.interceptor;
import java.lang.reflect.Proxy;
public classMyProxy {
public Object getProxy(Objectobject){
MyHandlermyHandler = new MyHandler();
myHandler.setObject(object);
return Proxy.newProxyInstance(Target.class.getClassLoader(),object.getClass().getInterfaces(), myHandler);
}
}
6.1.6实现Client
package com.lei.interceptor;
import java.lang.reflect.Proxy;
public classClient {
public static void main(String []arsg){
//生成被拦截对象
TargetInterfacetarget=newTarget();
MyProxymyProxy =newMyProxy();
TargetInterfaceproxy = (TargetInterface)myProxy.getProxy(target);
proxy.Something();
}
}