package gxx.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class JdkProxy {
public static void main(String[] args) {
JdkProxyExample jdk=new JdkProxyExample();
Helloword proxy =(Helloword)jdk.bind(new HelloworldImpl());
proxy.sayHelloWorld();
}
}
interface Helloword{
public void sayHelloWorld();
}
class HelloworldImpl implements Helloword{
@Override
public void sayHelloWorld() {
System.out.println("hello world");
}
}
class JdkProxyExample implements InvocationHandler{
private Object target=null;
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("进入代理逻辑方法");
System.out.println("在调度真实对象之前的服务");
Object obj=method.invoke(target, args);
System.out.println("在调用被代理对象之后要执行的服务");
return obj;
}
public Object bind(Object target){
this.target=target;
return Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), this);
}
}
package gxx.proxy;
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
public class CglibProxy {
public static void main(String[] args) {
CglibProxyExample cpe=new CglibProxyExample();
ReflectServiceImpl obj=(ReflectServiceImpl)cpe.getProxy(ReflectServiceImpl.class);
obj.sayHello("gxx");
}
}
class ReflectServiceImpl{
private String name;
void sayHello(String name){
System.out.println("hello:"+name);
}
}
class CglibProxyExample implements MethodInterceptor{
public Object getProxy(Class clz){
Enhancer enhancer=new Enhancer();
enhancer.setSuperclass(clz);
enhancer.setCallback(this);
return enhancer.create();
}
@Override
public Object intercept(Object proxy, Method method, Object[] args,
MethodProxy methodProxy) throws Throwable {
System.out.println("调用真实对象之前");
Object result=methodProxy.invokeSuper(proxy, args);
System.out.println("调用真实对象后");
return result;
}
}