PostSharp AOP编程:3.PostSharp的LocationInterceptionAspect类基本组成
在PostSharp中得LocationInterceptionAspect类是针对属性或字段的面向方面截取。继承与它的特性将可以截取初始化属性、设置属性、获取属性等时候的数据,并且可以在这几个过程中针对属性进行附加控制。
这个类里面有三个主要的函数可以重载分别是RuntimeInitialize(LocationInfo locationInfo)、OnSetValue(LocationInterceptionArgs args)、OnGetValue(LocationInterceptionArgs args)。他们分别意义如下:
RuntimeInitialize(LocationInfo locationInfo):初始化包含属性或字段的类的时候运行此函数,增加控制代码,可以截取到运行此属性或字段的类信息,属性类型等信息。
OnSetValue(LocationInterceptionArgs args):设置属性或字段值的时候运行此函数,增加相关设置值时代码,可以获取到此属性值、属性名等相关信息。
OnGetValue(LocationInterceptionArgs args)。获取属性或字段值的时候运行此函数。
首先我们编写一个继承于LocationInterceptionAspect类的特性,并且重载相关函数如下代码:
- [Serializable]
- public class TestAspect : LocationInterceptionAspect
- {
- //当目标类初始化属性的时候运行此函数。
- public override void RuntimeInitialize(LocationInfo locationInfo)
- {
- //打印类名、属性或字段名、字段类型
- string name = locationInfo.DeclaringType.Name + "." +
- locationInfo.Name + " (" + locationInfo.LocationType.Name + ")"; ;
- Console.WriteLine(name);
- Console.WriteLine("A");
- System.Reflection.FieldInfo finfo = locationInfo.FieldInfo;
- }
- //设置属性的时候运行
- public override void OnSetValue(LocationInterceptionArgs args)
- {
- Console.WriteLine(args.LocationName);
- Console.WriteLine("B");
- base.OnSetValue(args);
- }
- //获取属性的时候运行
- public override void OnGetValue(LocationInterceptionArgs args)
- {
- Console.WriteLine("C");
- base.OnGetValue(args);
- }
- }
其次我们编写一个目标类,此类中含有一个属性并且增加这个属性的特性如下代码所示:
- public class People
- {
- [TestAspect]
- public string Name { get; set; }
- }
最后我们在客户端初始化People类并且设置属性和获取属性如下代码:
- class Program
- {
- static void Main(string[] args)
- {
- People p = new People();
- p.Name = "Mike1";
- Console.WriteLine(p.Name);
- Console.ReadLine();
- }
- }
如需源码请点击 PostSharpField.rar 下载,运行效果如下图:
本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/827085
PostSharp AOP编程:3.PostSharp的LocationInterceptionAspect类基本组成相关推荐
- 由浅入深CIL系列【目录索引】+ PostSharp AOP编程【目录索引】
CIL简介:CIL(Common Intermediate Language)中文名为通用中间语言,注意它曾经被称为微软中间语言或MSIL,它是一种类似于JAVA字节码的语言.在微软语言平台中,不管程 ...
- PostSharp AOP编程:1.基于PostSharp的AOP日志记录和异常捕捉【附带源码】
AOP(基于切面编程):它是对业务逻辑的分离,使各个业务直接的耦合变低,比如在传统的OOP编程中将日志记录.异常处理.权限管理等方面剥离出来.在今后的维护过程中,对其改变日志记录.异常处理.权限管理方 ...
- Spring基础专题——第六章(Aop编程)
前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...
- JavaEE开发之Spring中的依赖注入与AOP编程
上篇博客我们系统的聊了<JavaEE开发之基于Eclipse的环境搭建以及Maven Web App的创建>,并在之前的博客中我们聊了依赖注入的相关东西,并且使用Objective-C的R ...
- 【原】iOS动态性(三) Method Swizzling以及AOP编程:在运行时进行代码注入
概述 今天我们主要讨论iOS runtime中的一种黑色技术,称为Method Swizzling.字面上理解Method Swizzling可能比较晦涩难懂,毕竟不是中文,不过你可以理解为" ...
- java元婴期(20)----java进阶(spring(4)---spring aop编程(全自动)AspectJ)
spring aop编程:全自动[掌握] 从spring容器获得目标类,如果配置aop,spring将自动生成代理. 要确定目标类,aspectj 切入点表达式,导入jar包(maven项目直接导入相 ...
- 4种实例 advice aop_Java动态代理在Spring的应用:AOP编程与动态代理知识
认真写文章,用心做分享.公众号:Java耕耘者 文章都会在里面更新,整理的资料也会放在里面. 关于代理模式的话题有很多,在开发中经常用到的应该是静态代理模式,能很好的去耦合. 动态代理是代理模式的另外 ...
- 使用XML方式进行AOP编程(代码)
UserDao.java接口: package com.liu.jdk;public interface UserDao {public void addUser();public void dele ...
- 在.NET Core中三种实现“可插拔”AOP编程方式(附源码)
一看标题肯定会联想到使用动态编织的方式实现AOP编程,不过这不是作者本文讨论的重点. 本文讨论另外三种在netcore中可实现的方式,Filter(过滤器,严格意义上它算是AOP方式),Dynamic ...
最新文章
- 笔记-中项案例题-2021年上-人力资源管理和沟通管理
- 带你快速了解 Docker 和 Kubernetes
- [HDU] 2553 N皇后问题-简单深搜
- ThreadX应用开发笔记之二:移植ThreadX到STM32H7平台
- geoserver发布瓦片_Geoserver2.15.1配置自带GeoWebCache 插件发布ArcGIS Server瓦片
- 如何在CentOS/RedHat下实现根据源码包创建rpm包
- ZYJ7型转辙设备安装调试工法
- layui表单提交时出现一闪而过的验证信息的原因
- WineBottler for Mac (Mac运行exe程序) 使用教程
- Webdriver - webdriver hangs when get or click
- Python 对json文件加密和解密
- Linux iperf 用法介绍
- 计算机规划语句,有关规划人生的句子
- 1625 夹克爷发红包(二进制枚举运用)
- “做产品的”,如何自我调节:一封家书,给同学们参考
- 四个锻炼方法腰椎间盘突出症全治好
- 基于Spring+SpringMVC+MyBatis博客系统的开发教程(四)
- 经典分频器——奇数分频(3分频,5分频,任意分频)
- typedef 范例解析
- 微信群裂变文案微信群裂变软件
热门文章
- ext4 文件系统的优化
- 国内首部高尔夫商战小说《手腕》(林健锋著)
- jboss5 启动时报HsqlException:length must be specified in type definition:VARBINARY错误
- 最小字典序问题java版
- python--windows下安装BeautifulSoup
- 关于silverlight5 打印功能收集
- Redis与Memcached简要比较
- [Linux] set dev label(设置分区卷标)
- 设计强大的云应用程序
- Knockout2.x:ko.dataFor()、ko.contextFor()使用