// JDK动态代理接口
public interface InvokationHandler{
public Object invoke(Object proxy, Mehtod method, Object[] args) throws Throwable;
}
// DBQuery代理类
public DBQueryProxy implement InvokationHandler{
private Object target;
// 动态生成代理类,以及代理类的对象
public Object bind(Object target){
this.target = target;
// 根据目标类的接口,生成代理类,以及代理类实例
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable{
// 丰富目标方法的调用逻辑
System.out.println("Calling DBQuery");
return method.invoke(target, args);
}
}
public class JDKProxyMain{
public static void main(String[] args){
DBQuery dbQuery = new DBQuery(); // 代理的目标对象
DBQueryProxy proxy = new DBQueryProxy(); // 代理对象
IDBQuery query = (IDBQuery)proxy.bind(dbQuery); // 动态生成代理类对象
query.request(); // 该方法最终会调用到代理对象的invoke方法
}
}
网友评论