// 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方法
}
}
JDK动态代理
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 1、JDK动态代理 JDK动态代理通过JDK的Proxy类实现,JDK提供的动态代理需要实现InvocationH...
- JDK动态代理原理 实际上jdk的动态代理很简单,最重要的方法就是ProxyGenerator.generateP...
- 前言 前几天,写一个case,做单元的测试。抛出了依赖注入失败的异常,然后发现是没有配置CGLIB动态代理的原因,...