开箱即用,DynamicProxy提供了多种代理对象,主要分成两个大类:

基于继承(Inheritance-based)

基于继承的代理是通过继承一个代理类来实现,代理拦截对类的虚(virtual)成员的调用并把它们转发到基本实现,在这种情况下,代理和被代理对象是一个,这也就意味着你不能为一个已经存在的对象,创建基于继承的代理.在DynamicProxy里只有一种基于继承的代理.

  • 类代理(Class proxy) - 为一个类创建一个基于继承的代理,只有类的虚成员能被拦截.

基于整合(Composition-based)

基于整合代理是一个新的对象,它继承于被代理的类/实现被代理的接口和(随意地)转发对目标对象的调用的拦截.DynamicProxy暴露了如下几种基于整合的代理:

  • 有目标的类代理(Class proxy with target) - 这种代理指向类.它不是一个完美的代理,如果类没有非虚成员或公开(public)成员就不能被拦截,它就会给用户提供一个对象的不一致的状态视图,基于这个原因,使用它时一定要小心.
  • 无目标的代理接口(Interface proxy without target) - 这种代理指向接口.不需要为它提供目标对象,相反地,该代理需要为拦截器提供所有成员的实现.
  • 有目标的代理接口(Interface proxy with target) - 顾名思义,包装指定的接口的对象的实现,转发对这些接口的调用到目标对象.
  • 有目标接口的代理接口(Interface proxy with target interface) - 这是一种针对两种不同接口合并的代理,可以(但不是必须)为它提供目标对象,也可以为它在生命周期里交换目标对象.它不是被绑定在某个类型上的目标代理,所以它可以复用在不同的类型上,只要这个类型实现了目标接口.

英文原文:https://github.com/castleproject/Core/blob/master/docs/dynamicproxy-kinds-of-proxy-objects.md

DynamicObject - 代理对象的种类的更多相关文章

  1. SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论

    异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#signalR 后台创建了一个DntHub的集线器 前台在调用的时候出现了问题(经检查是代理对象 ...

  2. 自己实现简单的AOP(四)自动初始化代理对象

    前面三篇随笔,已经完成了AOP的核心功能,但 代理对象的初始化还是有些麻烦,本文将解决该问题. Demo 片段如下: public class HomeController : Controller ...

  3. [译]ES6中的代理对象

    原文:http://ariya.ofilabs.com/2013/07/es6-and-proxy.html 能够拦截在一个对象上的指定操作的能力是非常有用的,尤其是在故障调试的时候.通过ECMASc ...

  4. 在spring中获取代理对象代理的目标对象工具类

    昨天晚上一哥们需要获取代理对象的目标对象,查找了文档发现没有相应的工具类,因此自己写了一个分享给大家.能获取JDK动态代理/CGLIB代理对象代理的目标对象. 问题描述:: 我现在遇到个棘手的问题,要 ...

  5. 获取JDK动态代理/CGLIB代理对象代理的目标对象。

    问题描述:: 我现在遇到个棘手的问题,要通过spring托管的service类保存对象,这个类是通过反射拿到的,经过实验发现这个类只能反射取得sservice实现了接口的方法,而extends类的方法 ...

  6. mybatis10 实现类代理对象开发

    mapper实现类代理对象开发 要想让mybatis自动创建dao接口实现类的代理对象,必须遵循一些规则: SqlSession sqlSession = sqlSessionFactory.open ...

  7. dubbo源码分析三:consumer注册及生成代理对象

    本章我们将分析一下consumer向注册中心注册,并获取服务端相应的信息,根据这些信息生产代理对象的过程和源码. 1.类图 上图展示了部分消费者注册及生成代理对象过程中需要使用到的类和接口,其中: s ...

  8. Andorid Binder进程间通信---Binder本地对象,实体对象,引用对象,代理对象的引用计数

    本文參考<Android系统源码情景分析>,作者罗升阳. 一.Binder库(libbinder)代码: ~/Android/frameworks/base/libs/binder --- ...

  9. Java中代理对象的使用小结

    在某些情况下,一个客户不想或不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到了中介作用,这不仅仅使用代理模式,还可以实现适配器模式.装饰模式等. 代理对象内部含有对真实对象的引用,从而 ...

随机推荐

  1. linux rsync配置文件参数详解

    一.全局参数 在[moudle]之前的参数都是全局参数,也可以在全局参数下定义部分模块参数,这时该参数的值就是所有模块的默认值. port:指定后台程序使用的端口号,默认是873 logfile:指定 ...

  2. nginx实现请求转发

    反向代理适用于很多场合,负载均衡是最普遍的用法. nginx 作为目前最流行的web服务器之一,可以很方便地实现反向代理. nginx 反向代理官方文档: NGINX REVERSE PROXY 当在 ...

  3. WebDriver基本API使用手册(基于Java和C#)

    WebDriver基本API使用手册(基于Java和C#) http://www.docin.com/p-747728551.html

  4. java 13-3 int类型的包装包Integer

    1.Integer的概述 需求1:把100这个数据的二进制,八进制,十六进制计算出来 需求2:判断一个数据是否是int范围内的.  首先你得知道int的范围是多大? 为了对基本数据类型进行更多的操作, ...

  5. java中,Date数据类型和JSONObject数据类型之间的转换

    import java.text.SimpleDateFormat;import java.util.Date;import net.sf.json.JSONObject; public class ...

  6. JS 网页打印解决方案

    这些日子真是太忙了,项目太多了公司总是加班,而且这些项目中好多都用到的打印,所以学习了一段时间js的打印. 其实原来只是用到了简单的功能,现在要深入的了解才发现原来ie的网页打印也是如此的强大. 以下 ...

  7. Git 学习资源

    在线教程 Try Git: Git初学者绝不能错过的Git上手资源. 廖雪峰Git教程: 比较系统的中文在线教程 易百Git教程 : 另一个比较全的中文在线教程 Git Immersion : A V ...

  8. C#易忘点

    下面是自己总结的一些C#语言方面用的少容易忘的地方,总结一下,在用的时候看一下.(仅针对本人) 参数数组 定义一个函数,用来取得数字的和,但是数字的个数不确定. 解决方案: 1,定义一个函数,参数传递 ...

  9. 设计模式之代理模式(Proxy Pattern)_补充篇

    写在前面: 代理模式的内部原理,作用及远程代理的实现在上一篇博文中都做了详细解释,本文只是对其内容的补充,介绍其它代理 一.虚拟代理 首先,明确虚拟代理的作用:在巨大对象被真正创建出来之前,用虚拟代理 ...

  10. Django HTML 转义

    HTML转义 模板对上下文传递的字符串进行输出时,会对以下字符自动转义 小于号< 转换为< 大于号> 转换为> 单引号' 转换为' 双引号" 转换为 " 与 ...