SpringProxy案例
静态代理
接口实现类
public class DStaticProxy implements IStaticProxy {
@Override
public void testWay01() {
System.out.println("接口实现类实现方法....");
}
}
代理类
public class PStaticProxy implements IStaticProxy {
private IStaticProxy proxyOne; //代理的接口
public PStaticProxy(IStaticProxy proxyOne) {
super();
this.proxyOne = proxyOne;
}
@Override
public void testWay01() {
System.out.println("静态代理执行的公共方法....");
proxyOne.testWay01();
}
}
测试类
public static void main(String[] args) {
《静态代理》
//获得接口
IStaticProxy ipro=new DStaticProxy();
//获得代理对象
PStaticProxy pro=new PStaticProxy(ipro);
//实现方法
pro.testWay01();
}
动态代理
接口实现类
public class DynamicProxy implements IDynamicProxy {
@Override
public void dynamicWay01() {
System.out.println("动态代理实现类实现的方法....");
}
}
代理类
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class PDynamicProxy implements InvocationHandler {
//定义被代理对象
private Object obj;
//构造函数 赋值 传参
public PDynamicProxy(Object obj) {
super();
this.obj = obj;
}
public static Object getProxyFactory(Object obj){
Class<?> classType=obj.getClass();
return Proxy.newProxyInstance(classType.getClassLoader(),
classType.getInterfaces(), new PDynamicProxy(obj));
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("--------before-------");
//目标函数
method.invoke(obj, args);
System.out.println("--------after-------");
return null;
}
}
测试类
public static void main(String[] args) {
《动态代理》
DynamicProxy dynamic = new DynamicProxy();
//直接执行方法
dynamic.dynamicWay01();
//获取代理类,将对象传递给 代理方法
IDynamicProxy dynamicPro =(IDynamicProxy)PDynamicProxy.getProxyFactory(dynamic);
dynamicPro.dynamicWay01();
}