为其他对象提供一种代理以控制对这个对象的访问。
public class Proxy_Main {
public static void main(String[] args) {
JDKHanlder jdkHanlder = new JDKHanlder();
Proxyed demo = (Proxyed) jdkHanlder.bind(new ProxyedImpl());
demo.proxy();
System.out.println("------------------------");
CGLIBInterceptor cglibInterceptor = new CGLIBInterceptor();
Proxyed proxy = (Proxyed) cglibInterceptor.getProxy(ProxyedImpl.class);
proxy.proxy();
}
}
interface Proxyed{
void proxy();
}
class ProxyedImpl implements Proxyed{
@Override
public void proxy() {
System.out.println("动态代理真实实现");
}
}
class JDKHanlder implements InvocationHandler{
private Object target;
public Object bind(Object target){
this.target = target;
return Proxy.newProxyInstance(this.getClass().getClassLoader(),target.getClass().getInterfaces(),this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("handler...start...");
method.invoke(target,args);
System.out.println("handler...end...");
return null;
}
}
class CGLIBInterceptor implements MethodInterceptor{
public Object getProxy(Class cla){
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(cla);
enhancer.setCallback(this);
return enhancer.create();
}
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println("interceptor...start...");
methodProxy.invokeSuper(o,objects);
System.out.println("interceptor...end...");
return null;
}
}