主要是java的两类动态代理,其实只是代理目标不同,方式都一样
1、代理目标是类
//动态代理类
public class DynamicProxy implements InvocationHandler {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//方法重写,代理业务处理
//System.out.println("代理对象:"+proxy);
//System.out.println("代理目标:"+target);
//System.out.println("代理业务:"+method.getName());
//System.out.println("代理参数:"+Arrays.toString(args));
// 自定义业务
System.out.println("Hello World");
// return null;// 不回调源业务
// 回调原业务
return method.invoke(target, args);
}
// 代理目标(类)
private Object target;
public CDynamicProxy(Object target) {
super();
this.target = target;
}
//代理对象
public Object createProxyInstance(){
// target.getClass().getClassLoader()注册代理目标
return Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), this);
}
}
2、代理目标是接口
//代理接口
public class DynamicProxy implements InvocationHandler {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//方法重写,代理业务处理
//System.out.println("代理对象:"+proxy);
//System.out.println("代理目标:"+target);
//System.out.println("代理业务:"+method.getName());
//System.out.println("代理参数:"+Arrays.toString(args));
// 自定义业务
System.out.println("Hello World");
return null;
}
// 代理目标(接口)
private Class<?> target;
public IDynamicProxy(Class<?> target) {
super();
this.target = target;
}
//代理对象
public Object getProxyInstance(){
//target.getClassLoader()注册代理目标
return Proxy.newProxyInstance(target.getClassLoader(),
new Class[]{target}, this);
}
}