利用消息机制实现.NET AOP(面向方面编程)--基本概念和实现
- 本系列文章主要讲述如何利用.NET的Remoting消息框架实现AOP
- 本系列文章试图实现三种AOP实现
- 本系列文章以示例代码为主,对一些概念和原理不会进行过于深入的讨论
- 这里不谈论AOP在现实开发中是否有必要,只停留在技术实现层面
- 我的实现可能并不成熟,请有实际应用经验的朋友指教
- 网络上有大量AOP的文章,本系列文章的目的是以简单的实现示例代码以达到供学习的目的
- 本系列实现的框架都以实现通过Attribute插入截获为目的
- 本系列代码看似简单,其实都是我专门去研究了一下Remoting才实现的,因为我原来对Remoting没有什么了解,所以请不要扔砖
一、基本概念
1、消息:消息是.NET Remoting应用程序中数据以及堆栈调用传递的基础单元。消息可以用来把堆栈调用转换成易于使用的.NET对象,使我们可以像使用其它.NET对象一样来管理程序中的各种函数调用。消息都派生自IMessage接口,IMessage接口有一个名为Properties的IDictionary属性,用来保存消息的各种信息,IMessage的继承类根据各自的特点封装Properties,以方便使用,比如IMethodReturnMessage就有ReturnValue属性来访问返回结果。IMessage的子类有:IMethodMessage,IMethodReturnMessage,IMethodCallMessage,IConstructionCallMessage,IConstructionReturnMessage,ReturnMessage。大家看看它们的名字就知道各是干什么用的。
2、代理:代理分两类,透明代理(TransparentProxy)和真实代理(RealProxy),透明代理在不受我们控制,真实代理可用于在自定义代码中控制消息。透明代理主要是截获对象方法的调用,并把调用传递给它对应的真实代理。
3、MarshalByRefObject、ContextBoundObject。要截获对象的方法调用,必须是从这两个类继承的类。MarshalByRefObject告诉编译器,不要把这个类中的简单函数优化成内联代码,这样才能保证所有方法调用都能截获。ContextBoundObject对象绑定各自的上下文,这样的话对象一初始化,就会进行上下文检查,建立和绑定,这同时也使我们有机会干预对象的构造函数。
4、上下文绑定对象的消息接收链:上下文绑定对象的消息调用有一系列的消息接收器,最初调用消息发组代理理(ContextBoundObject默认有一个RemotingProxy真实代理),接着发给特使接收器链,并由EnvoyTerminatorSink发给客户端上下文接收链,再由ClientContextTerminatorSink把消息由客户端转发到服务端(目标对象端),服务器上下文接收器链收到消息,一直传到ServerContextTerminatorSink传给服务器对象接收器链,最后ObjectTerminatorSink把消息传给StackBuilderSink。(四种Sink的运行和调用方与被调用方所在的位置,四种Sink的相互作用有关,想深入了解的朋友可以写代码一一测试。)
二、三种实现
利用消息机制实现.NET AOP(面向方面编程)--通过RealProxy实现
利用消息机制实现.NET AOP(面向方面编程)--利用RealProxy和消息接收器实现多截获
利用消息机制实现.NET AOP(面向方面编程)--利用ServerContextSink实现多截获
利用消息机制实现.NET AOP(面向方面编程)--基本概念和实现相关推荐
- Javascript aop(面向切面编程)之around(环绕)
Aop又叫面向切面编程,其中"通知"是切面的具体实现,分为before(前置通知).after(后置通知).around(环绕通知),用过spring的同学肯定对它非常熟悉,而在j ...
- spring中AOP(面向切面编程)
spring中AOP(面向切面编程) 面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是spring框架中的一个重要内容 ...
- 【SSM】Spring系列——AOP面向切面编程
文章目录 03 AOP面向切面编程 3.1 AOP概述 3.2 面向切面编程对有什么好处 3.3 模拟AOP框架实现 3.3.1 代码实现版本一 3.3.2 代码实现版本二 3.3.3 代码实现版本三 ...
- java aop面向切面编程
最近一直在学java的spring boot,一直没有弄明白aop面向切面编程是什么意思.看到一篇文章写得很清楚,终于弄明白了,原来跟python的装饰器一样的效果.http://www.cnblog ...
- 【AOP 面向切面编程】AOP 简介 ( AspectJ 简介 | AspectJ 下载 )
文章目录 一.AOP 简介 二.AspectJ 简介 三.AspectJ 下载 一.AOP 简介 AOP 是 Aspect Oriented Programming 的缩写 , 面向切面编程 ; 利用 ...
- 大数据WEB阶段Spring框架 AOP面向切面编程(一)
Spring - AOP面向切面编程(一) 一.代理模式概述 代理的特点:(目标对象即被代理者) 实现和目标对象相同的接口 具备和目标对象的方法 代理者不仅要做目标对象的方法 , 还要做一些额外的操作 ...
- AOP(面向切面编程)大概了解一下
前言 上一篇在聊MemoryCache的时候,用到了Autofac提供的拦截器进行面向切面编程,很明显能体会到其优势,既然涉及到了,那就趁热打铁,一起来探探面向切面编程. 正文 1. 概述 在软件业, ...
- 切入点和切入点表达式(AOP面向切面编程)
https://blog.csdn.net/keda8997110/article/details/50747923/ AOP面向切面编程.通过预编译方式和运行期动态代理实现程序功能的统一维护的技术. ...
- AOP—面向切面编程
前言 上一篇在聊MemoryCache的时候,用到了Autofac提供的拦截器进行面向切面编程,很明显能体会到其优势,既然涉及到了,那就趁热打铁,一起来探探面向切面编程. 正文 概述 在软件业,AOP ...
最新文章
- 2020-12-13
- SharePoint 2013 Word 转换PDF服务介绍及示例
- 51nod 3 * problem
- Delphi多媒体设计之TMediaPlayer组件(一)
- C#——简单的计算器(仿Windows 10计算器)
- TypeError系列之:TypeError: only size-1 arrays can be converted to Python scalars
- spring客户端resttemplate/feign/httpclient调研
- flume简介(大数据技术)
- SVN:安装svn进行上传和检出文件的常用命令
- Mybatis 插入时获取主键的方式
- Mybatis参数Integer类型值为0 源码处理
- python继承方式是基于原型吗_【Python】python 普通继承方式和super继承方式
- 【EMNLP2020】忒修斯之船启发下的知识蒸馏新思路 - 微软研究院
- java swap_Java中swap()方法的实现
- CUDA编程学习笔记 之 页锁定内存(固定内存Pinned Memory)
- 如何将小车标注在百度地图上并且设置车头方向
- 火狐 代理服务器拒绝连接
- 【开源工程】STM32C8T6+ADC信号采集+OLED波形显示
- 如何成功实施结对编程
- HCL_H3CNE综合实验