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

桓台县城乡建设局网站收录优美图片官网

桓台县城乡建设局网站,收录优美图片官网,网站建设 实训题,做企业网站软件代理可以进一步划分为静态代理和动态代理,代理模式在实际的生活中场景很多,例如中介、律师、代购等行业,都是简单的代理逻辑,在这个模式下存在两个关键角色: 目标对象角色:即代理对象所代表的对象。 代理…

代理可以进一步划分为静态代理和动态代理,代理模式在实际的生活中场景很多,例如中介、律师、代购等行业,都是简单的代理逻辑,在这个模式下存在两个关键角色:

目标对象角色:即代理对象所代表的对象。

代理对象角色:内部含有目标对象的引用,可以操作目标对象

一、静态代理

目标对象角色

public class Target {public void execute(){System.out.println("Target execute...");}
}

代理对象角色

public class ProxyObj {private Target target;public  ProxyObj(Target target){this.target=target;}public void invoke(){before();target.execute();after();}public void before(){System.out.println("before...");}public void after(){System.out.println("after...");}
}
public class Proxy {public static void main(String[] args) {Target target = new Target();ProxyObj proxy = new ProxyObj(target);proxy.invoke();}
}

代理模式的本质是在目标对象的方法前后置入增强操作

二、动态代理

首先看两个核心类,这里简述下概念,看完基本过程再细聊:

  • Proxy-创建代理对象,核心参数:

    • ClassLoader:(目标类)加载器;
    • Interfaces:(目标类)接口数组;
    • InvocationHandler:代理调用机制;
  • InvocationHandler-代理类调用机制:

    • invoke:这个上篇说的反射原理;
    • method:反射类库中的核心API;

目标对象和接口

interface IUser {Integer update (String name) ;
}
class UserService implements IUser {@Overridepublic Integer update(String name) {Integer userId = 99 ;System.out.println("UserId="+userId+";updateName="+name);return userId ;}
}

代理对象执行机制

class UserHandler implements InvocationHandler {private Object target ;public UserHandler (Object target){this.target = target ;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("before()...");Object result = method.invoke(target, args);System.out.println("after()...");return result;}
}

具体使用:

public class Proxy02 {public static void main(String[] args) {/** 生成$Proxy0的class文件*/System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");/** 目标对象信息*/IUser userService = new UserService();ClassLoader classLoader = userService.getClass().getClassLoader();Class<?>[] interfaces = UserService.class.getInterfaces() ;/** 创建代理对象*/InvocationHandler userHandler = new UserHandler(userService);/** 代理类对象名* proxyClassName=com.java.proxy.$Proxy0*/String proxyClassName = Proxy.newProxyInstance(classLoader,interfaces,userHandler).getClass().getName();System.out.println("proxyClassName="+proxyClassName);/** 具体业务实现模拟*/IUser proxyUser1 = (IUser) Proxy.newProxyInstance(classLoader,interfaces,userHandler);IUser proxyUser2 = (IUser) Proxy.newProxyInstance(classLoader,interfaces,userHandler);proxyUser1.update("cicada") ;proxyUser2.update("smile") ;}
}

 

JDK源码

IUser proxyUser = (IUser) Proxy.newProxyInstance(classLoader,interfaces,userHandler);

Proxy提供的静态方法newProxyInstance(),通过各个参数的传入,构建一个新的代理Class对象,即$Proxy0类的结构信息,这里再回首看下三个核心参数:

  • ClassLoader:基于JVM运行过程,所以需要获取目标类UserService的类加载器;

  • Interfaces:目标类UserService实现的接口,从面向对象来考虑,接口与实现分离,代理类通过实现IUser接口,模拟目标类的需求;

  • InvocationHandler:代理类提供的功能封装即UserHandler,可以在目标方法调用前后做增强处理

http://www.mmbaike.com/news/24837.html

相关文章:

  • 网站建设都包括哪些怎么把产品快速宣传并推广
  • 网站开发 不好 怎么说百度视频广告怎么投放
  • 个人网站怎么做游戏免费建立个人网站凡科
  • 长沙零基础学快速建站百度怎么优化排名
  • wordpress 设置urlseo兼职工资一般多少
  • 用github做网站厦门百度seo
  • 石家庄微信网站建设公司营销推广的特点是
  • 苏州做网站的专业公司有哪些长沙的seo网络公司
  • 苏州网站设计制作网站的优化从哪里进行
  • 辛集做网站公司建网站费用
  • 番禺外贸网站建设新站seo快速排名 排名
  • 微网站策划方案百度引流平台
  • 公司做网站的流程网络营销课程培训课程
  • 厦门做网站公司内容营销成功案例
  • 网站建设公司小程序各国足球世界排名
  • 济宁网站建设方面推广普通话手抄报一等奖
  • 启博云微分销亚马逊排名seo
  • 电脑怎样做幻灯片的网站金华百度推广公司
  • php网站模版网站关键词优化
  • 呼和浩特网站建设价位2023年8月份新冠
  • 做视频网站需要项目营销推广方案
  • 普陀集团网站建设品牌营销推广方案怎么做
  • 专业做数据的网站有哪些方面今日十大热点新闻
  • 怎么做网站不被发现黑龙seo网站优化
  • 天宁常州做网站企点
  • 网站建设金手指专业网站开发的公司
  • 网站开发数据库课程设计超级软文
  • 市场网络营销南京怎样优化关键词排名
  • 网站地图创建视频号链接怎么获取
  • 北京网站制作济南淘宝新店怎么快速做起来