public interface Dao {
public int add(int a,int b);
public String add(String id);
}
class DaoImp implements Dao{
@Override
public int add(int a, int b) {
System.out.println("原始方法");
return a+b;
}
@Override
public String add(String id) {
return id;
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class JDKProxy {
public static void main(String[] args){
Class[] interfaces = {Dao.class};//所有类和接口都是Class类的对象
DaoImp daoImp = new DaoImp();
//创建接口实现类代理对象
Dao dao = (Dao) Proxy.newProxyInstance(JDKProxy.class.getClassLoader(), interfaces, new DaoProxy(daoImp));
int res = dao.add(1,2);
System.out.println(res);
}
}
class DaoProxy implements InvocationHandler{
//1、创建谁的代理对象,就把谁传进来
DaoImp daoImp;
//有参数构造传递
public DaoProxy(DaoImp daoImp){
this.daoImp = daoImp;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//增强的逻辑
//原始方法执行前
System.out.println("原始方法执行前");
//原始方法
Object res = method.invoke(daoImp,args);
//原始方法执行后
System.out.println("原始方法执行后");
return res;
}
}