动态代理
在上一篇文章中讲了静态代理说了它有一些弊端,今天在这里讲一下动态代理,来避免静态代理的弊端。
在java中自带动态代理机制,在这里我们先看怎么来实现动态代理的。
Man man = new Man();
//获取了代理 ,代理了所有的方法而且都会走InvocationHandler里面的invoke方法
``IRestaurant proxy = (IRestaurant) Proxy.newProxyInstance(
IRestaurant.class.getClassLoader(),//ClassLaoder
new Class>[]{IRestaurant.class},//接口类数组
new RestaurantInvocationHandler(man)//回调);
private static class RestaurantInvocationHandler implements InvocationHandler{private IRestaurant iRestaurant;
public RestaurantInvocationHandler(Man man) {
this.iRestaurant = man;
}@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.print("做一些事情");
Object invoke = method.invoke(iRestaurant, args);
return invoke;
}
}
【动态代理】在这里我们先通过Proxy获取一个代理对象,需要传入三个参数,一个是ClassLoader,第二个是需要一个接口类的数组,第三个参数需要传入一个InvocationHandler的对象。这个InvocationHandler类里面的invoke方法就去执行了我们Man里面的那个方法。我们在invoke里面去做一些我们想要去做的事情。这样既不用去Chef类中得方法重复去写我们要做的事情。这样就实现了动态代理。
推荐阅读
- 事件代理
- 动态组件与v-once指令
- 设计模式-代理模式-Proxy
- java静态代理模式
- Kotlin基础(10)-代理模式在kotlin中的使用
- iview|iview upload 动态改变上传参数
- 杨义辉老师的书画展在上海雅缘荟画廊拉开帷幕
- react-navigation|react-navigation 动态修改 tabBar 样式
- K14|K14 9/15销售提问法D2
- 动态|诗歌《在精神科诊室》发《小说与诗》(香港)报