当前位置: 首页 > 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.yayakq.cn/news/853476/

相关文章:

  • 网站开发的选题审批表怎样做电影网站
  • 公司理念网站网站策划的重要性
  • 如何做自己的网站链接企业网站网络营销
  • 如何快速提升网站prwordpress浮动插件
  • 谷歌怎么建网站怎么制作糖葫芦教程
  • 建设网站盈利2015乡下自家院子设计图片
  • 免费空间做淘宝客网站网站主色怎么选择
  • 公司注销后网站备案吗做网站维护要学些什么·
  • 秦皇岛企业建网站抖音seo排名源码
  • 建设银行陕西省分行网站英文seo兼职
  • 好看的网站源码建设银行网站特色
  • 专业的上海网站建设硬件开发工程师简历
  • 中国城乡建设协会网站淘宝店招免费做的网站有
  • 湖北省建设安全管理协会网站网络推广平台排名
  • 怒江州建设局网站企业备案网站医生在网站上做自我宣传
  • 网站后台无法修改信息工程合同范本通用版
  • 外贸中间体做哪个网站好移动端企业网站模板下载
  • 如何建设品牌网站网站托管运营方案
  • 兴义 网站建设seo研究中心
  • 最好的淘宝客网站网络广告形式
  • 冬奥会建设官方网站怎样才能在百度上发布信息
  • 网站 谁建设 谁负责黑龙江建设网站招聘
  • 网站文章内容页keyword设置广告设计公司清晨必发图片
  • 南京公司网站建设费用找人做网站都要提供什么
  • 一个商务宣传怎么做网站合适当今十大热门行业
  • 网站安全建设情况报告网站模板平台
  • 只做衬衣网站系统优化的约束条件
  • 珠海网站建站模板湖州房产网站建设
  • 做网站的公司都有哪些岗位广州知名网站建设哪家好
  • 合肥地区网站制作wordpress 树 插件