当前位置: 首页 > 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/543749/

相关文章:

  • 专门做图片的网站有哪些电商平台怎么运营的
  • 如何建立一个网站卖东西学校申请建设网站的原因
  • 潮州市住房和城乡建设局网站.net网站项目有哪些
  • 动画网站建设云南网站建设哪家公司好
  • wordpress建不了网站wordpress 不显示图片
  • 企业网站建设销售前景wordpress pdf 下载失败
  • 做网站建设需要做哪些工作青岛公司网站建设开发
  • 新余代网站建设公司外贸set是什么意思
  • 泰安网站制作服务网站开发语言分为几种
  • 做什么网站开发好在线代理网页浏览网站
  • 宁波公司注销深圳谷歌优化seo
  • 铁道部建设管理司网站东莞百度seo服务公司
  • lanyun网站开发制作钓鱼网站
  • 成都网站建设公司排名招生平台网站开发
  • 北京建站优化六安网新科技集团有限公司
  • 建站网站知乎湛江做网站seo的
  • 网站软件资源计算机网络技术出来干什么
  • 做模板网站赚钱吗导购网站的seo怎么做
  • 智库建设网站方案山西做网站优势
  • 做商业网站是否要备案手机商城下载
  • 苏州市吴中区住房和城乡建设局官方网站手机编程软件有哪些
  • 网站主机方案北京公司注册地址新规定
  • 网站展示型广告招聘网站哪个平台比较好
  • 上海大型网站建设公司推广型网站免费建设
  • 贵阳做网站设计wordpress 私密
  • 广东电子商务网站网站建设跟推广评价指标有什么关系
  • 站长论坛十大搜索引擎排名
  • 台州网站建站公司广西网站建设
  • 服装做外贸的网站建设请问门户网站是什么意思
  • 民族团结 网站建设百度指数的主要功能有