当前位置: 首页 > news >正文

扬中网站建设推广在线生成器免费

扬中网站建设推广,在线生成器免费,网络游戏开发商,公众号官方文章目录 代理模式1、静态代理2、动态代理jdk自带动态代理 3、Cglib代理 来和大家聊聊代理模式 代理模式 代理模式#xff1a;即通过代理对象访问目标对象#xff0c;实现目标对象的方法。这样做的好处是#xff1a;可以在目标对象实现的基础上#xff0c;增强额外的功能操… 文章目录 代理模式1、静态代理2、动态代理jdk自带动态代理 3、Cglib代理 来和大家聊聊代理模式 代理模式 代理模式即通过代理对象访问目标对象实现目标对象的方法。这样做的好处是可以在目标对象实现的基础上增强额外的功能操作实现对目标功能的扩展。 这涉及到一个编程思想不要随意去修改别人已经写好的代码或者方法有坑。如果需要修改可以通过代理模式实现。 代理模式通常有三种实现写法静态代理、动态代理、Cglib代理 代理模式的UML图 从UML图中可以看出代理类与真正实现的类都是继承了抽象的主题类这样的好处在于代理类可以与实际的类有相同的方法可以保证客户端使用的透明性。 1、静态代理 我们先看针对上面UML实现的例子再看静态代理的特点。 Subject接口的实现 public interface Subject {void visit(); }实现了Subject接口的两个类 public class RealSubject implements Subject {private String name byhieg;Overridepublic void visit() {System.out.println(name);} } public class ProxySubject implements Subject{private Subject subject;public ProxySubject(Subject subject) {this.subject subject;}Overridepublic void visit() {subject.visit();} }具体调用如下 public class Client {public static void main(String[] args) {ProxySubject subject new ProxySubject(new RealSubject());subject.visit();} }通过上面的代理代码我们可以看出代理模式的特点代理类接受一个Subject接口的对象任何实现该接口的对象都可以通过代理类进行代理增加了通用性。但是也有缺点每一个代理类都必须实现一遍委托类也就是realsubject的接口如果接口增加方法则代理类也必须跟着修改。其次代理类每一个接口对象对应一个委托对象如果委托对象非常多则静态代理类就非常臃肿难以胜任。 2、动态代理 动态代理有别于静态代理是根据代理的对象动态创建代理类。这样就可以避免静态代理中代理类接口过多的问题。动态代理是实现方式是通过反射来实现的借助Java自带的java.lang.reflect.Proxy,通过固定的规则生成。 其步骤如下 编写一个委托类的接口即静态代理的Subject接口 实现一个真正的委托类即静态代理的RealSubject类 创建一个动态代理类实现InvocationHandler接口并重写该invoke方法 在测试类中生成动态代理的对象。 第一二步骤和静态代理一样不过说了。第三步代码如下 public class DynamicProxy implements InvocationHandler {private Object object;public DynamicProxy(Object object) {this.object object;}Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object result method.invoke(object, args);return result;} }第四步创建动态代理的对象 Subject realSubject new RealSubject(); DynamicProxy proxy new DynamicProxy(realSubject); ClassLoader classLoader realSubject.getClass().getClassLoader(); Subject subject (Subject) Proxy.newProxyInstance(classLoader, new Class[]{Subject.class}, proxy); subject.visit();创建动态代理的对象需要借助Proxy.newProxyInstance。该方法的三个参数分别是 ClassLoader loader表示当前使用到的appClassloader。 Class?[] interfaces表示目标对象实现的一组接口。 InvocationHandler h表示当前的InvocationHandler实现实例对象。jdk自带动态代理 java.lang.reflect.Proxy 作用动态生成代理类和对象 java.lang.reflect.InvocationHandler(处理器接口) 可以通过invoke方法实现对真实角色的代理访问每次通过Proxy生成代理类对象时都指定对对应的处理器对象 3、Cglib代理 要实现Cglib代理必须引入cglib.jar 包由于Spring-core包中已经包含了cglib功能且大部分Java项目均引入了spring 相关jar包这边使用spring的cglib来讲解。他俩实现方式都是一样的 public class CglibProxy implements MethodInterceptor {//目标对象private Object obj;public CglibProxy(Object obj){this.objobj;}//给目标对象创建一个代理对象public Object getProxyInstance(){//1.工具类Enhancer en new Enhancer();//2.设置父类en.setSuperclass(obj.getClass());//3.设置回调函数en.setCallback(this);//4.创建子类(代理对象)return en.create();}Overridepublic Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {System.out.println(CglibProxy---------);return method.invoke(obj,objects);} }说明可以看出Cglib代理模式实现不需要目标对象一定实现接口故目标对象如果没有实现接口可以使用cglib代理模式。其实Spring的代理模式也是这么实现的。
http://www.hkea.cn/news/14256856/

相关文章:

  • 网站开发财务猪八戒网站怎么做任务
  • wordpress一句话木马网站的后续优化方案
  • 零基础网站建设教程com域名注册接口
  • 做刷网站海洋网络推广效果
  • 博山做网站公司上海网站商城建设公司
  • w微信网站开发c 网站开发数据库连接
  • 深圳签网站口碑营销话题
  • o2o网站wordpress斜杠
  • 广州网站建设设计公司手机网页打不开是什么原因
  • 如何选择电商网站建设wordpress 内容 管理
  • 办网站租服务器做旅游攻略的网站
  • 建行网站会员是什么logo在线设计制作
  • 律所网站建设国队男子接力赛上海公司建立网站吗
  • wordpress软件站主题兰州网站建设专家
  • 西宁公司网站设计线上营销方法有哪些
  • 深圳知名网站建设平台dedecms5.7装饰公司网站模板
  • 网站建设能赚多少钱网站内容建设和管理
  • 网站建设投标文件如何网推
  • 重庆网站建设公司招聘前端直播网站怎么做
  • 陕西榆林市信息网站建设公司兰州 网站建设公司
  • 如果查询网站内页的收录情况石家庄seo管理
  • 申请网站建设经费玉泉路网站建设
  • 网站开发发展存在的问题新余 网站建设
  • 网站开发与托管协议合肥有什么好的网站建设公司
  • h5网站开发软件有名vi设计公司
  • 制作网站怎么制作网页无法访问但是有网什么原因
  • 网站建设主机耗电量淘宝网页版手机登录
  • 净水机企业网站源码东山县建设银行网站
  • 有没有做生鲜配送的网站骨科医院网站模板
  • 保定门户网站昆明网站建设手机版