利用了代理模式
一.静态代理
测试类:
package cn.qf.demo.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Test {
public static void main(String[] args) {
UserDaoImpl udi = new UserDaoImpl();
//静态代理
UserDaoImplProxy udip = new UserDaoImplProxy();
udip.setProxy(udi);
udip.Adduser();
}
}
二.动态代理
代理类:
package cn.qf.demo.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
//动态代理 需要jdkInvocationHandler接口
public class DyProxy<T> implements InvocationHandler{
public DyProxy(T target) {
this.target = target;
}
//属性:target用来接收所代理的对象
private T target;
public T getTarget() {
return target;
}
public void setTarget(T target) {
this.target = target;
}
@Override
//Object proxy 所代理的对象,泛型,可以是任意类型
//Method method 所执行的方法
//Object[] args 代理执行的方法的参数
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//声明变量来存放执行代理对象方法的返回值
Object o = null;
System.out.println("动态代理开始执行");
try {
o = method.invoke(target, args);
} catch (Exception e) {
System.out.println("执行代理对象方法发生异常");
} finally {
System.out.println("代理对象方法执行结束");
}
return o;
}
}
测试类