在PostSharp中得LocationInterceptionAspect类是针对属性或字段的面向方面截取。继承与它的特性将可以截取初始化属性、设置属性、获取属性等时候的数据,并且可以在这几个过程中针对属性进行附加控制。

这个类里面有三个主要的函数可以重载分别是RuntimeInitialize(LocationInfo locationInfo)、OnSetValue(LocationInterceptionArgs args)、OnGetValue(LocationInterceptionArgs args)。他们分别意义如下:

RuntimeInitialize(LocationInfo locationInfo):初始化包含属性或字段的类的时候运行此函数,增加控制代码,可以截取到运行此属性或字段的类信息,属性类型等信息。

OnSetValue(LocationInterceptionArgs args):设置属性或字段值的时候运行此函数,增加相关设置值时代码,可以获取到此属性值、属性名等相关信息。

OnGetValue(LocationInterceptionArgs args)。获取属性或字段值的时候运行此函数。

首先我们编写一个继承于LocationInterceptionAspect类的特性,并且重载相关函数如下代码:

  1. [Serializable]
  2. public class TestAspect : LocationInterceptionAspect
  3. {
  4. //当目标类初始化属性的时候运行此函数。
  5. public override void RuntimeInitialize(LocationInfo locationInfo)
  6. {
  7. //打印类名、属性或字段名、字段类型
  8. string name = locationInfo.DeclaringType.Name + "." +
  9. locationInfo.Name + " (" + locationInfo.LocationType.Name + ")"; ;
  10. Console.WriteLine(name);
  11. Console.WriteLine("A");
  12. System.Reflection.FieldInfo finfo = locationInfo.FieldInfo;
  13. }
  14. //设置属性的时候运行
  15. public override void OnSetValue(LocationInterceptionArgs args)
  16. {
  17. Console.WriteLine(args.LocationName);
  18. Console.WriteLine("B");
  19. base.OnSetValue(args);
  20. }
  21. //获取属性的时候运行
  22. public override void OnGetValue(LocationInterceptionArgs args)
  23. {
  24. Console.WriteLine("C");
  25. base.OnGetValue(args);
  26. }
  27. }

其次我们编写一个目标类,此类中含有一个属性并且增加这个属性的特性如下代码所示:

  1. public class People
  2. {
  3. [TestAspect]
  4. public string Name { get; set; }
  5. }

最后我们在客户端初始化People类并且设置属性和获取属性如下代码:

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. People p = new People();
  6. p.Name = "Mike1";
  7. Console.WriteLine(p.Name);
  8. Console.ReadLine();
  9. }
  10. }

如需源码请点击 PostSharpField.rar  下载,运行效果如下图:

本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/827085

PostSharp AOP编程:3.PostSharp的LocationInterceptionAspect类基本组成相关推荐

  1. 由浅入深CIL系列【目录索引】+ PostSharp AOP编程【目录索引】

    CIL简介:CIL(Common Intermediate Language)中文名为通用中间语言,注意它曾经被称为微软中间语言或MSIL,它是一种类似于JAVA字节码的语言.在微软语言平台中,不管程 ...

  2. PostSharp AOP编程:1.基于PostSharp的AOP日志记录和异常捕捉【附带源码】

    AOP(基于切面编程):它是对业务逻辑的分离,使各个业务直接的耦合变低,比如在传统的OOP编程中将日志记录.异常处理.权限管理等方面剥离出来.在今后的维护过程中,对其改变日志记录.异常处理.权限管理方 ...

  3. Spring基础专题——第六章(Aop编程)

    前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...

  4. JavaEE开发之Spring中的依赖注入与AOP编程

    上篇博客我们系统的聊了<JavaEE开发之基于Eclipse的环境搭建以及Maven Web App的创建>,并在之前的博客中我们聊了依赖注入的相关东西,并且使用Objective-C的R ...

  5. 【原】iOS动态性(三) Method Swizzling以及AOP编程:在运行时进行代码注入

    概述 今天我们主要讨论iOS runtime中的一种黑色技术,称为Method Swizzling.字面上理解Method Swizzling可能比较晦涩难懂,毕竟不是中文,不过你可以理解为" ...

  6. java元婴期(20)----java进阶(spring(4)---spring aop编程(全自动)AspectJ)

    spring aop编程:全自动[掌握] 从spring容器获得目标类,如果配置aop,spring将自动生成代理. 要确定目标类,aspectj 切入点表达式,导入jar包(maven项目直接导入相 ...

  7. 4种实例 advice aop_Java动态代理在Spring的应用:AOP编程与动态代理知识

    认真写文章,用心做分享.公众号:Java耕耘者 文章都会在里面更新,整理的资料也会放在里面. 关于代理模式的话题有很多,在开发中经常用到的应该是静态代理模式,能很好的去耦合. 动态代理是代理模式的另外 ...

  8. 使用XML方式进行AOP编程(代码)

    UserDao.java接口: package com.liu.jdk;public interface UserDao {public void addUser();public void dele ...

  9. 在.NET Core中三种实现“可插拔”AOP编程方式(附源码)

    一看标题肯定会联想到使用动态编织的方式实现AOP编程,不过这不是作者本文讨论的重点. 本文讨论另外三种在netcore中可实现的方式,Filter(过滤器,严格意义上它算是AOP方式),Dynamic ...

最新文章

  1. 笔记-中项案例题-2021年上-人力资源管理和沟通管理
  2. 带你快速了解 Docker 和 Kubernetes
  3. [HDU] 2553 N皇后问题-简单深搜
  4. ThreadX应用开发笔记之二:移植ThreadX到STM32H7平台
  5. geoserver发布瓦片_Geoserver2.15.1配置自带GeoWebCache 插件发布ArcGIS Server瓦片
  6. 如何在CentOS/RedHat下实现根据源码包创建rpm包
  7. ZYJ7型转辙设备安装调试工法
  8. layui表单提交时出现一闪而过的验证信息的原因
  9. WineBottler for Mac (Mac运行exe程序) 使用教程
  10. Webdriver - webdriver hangs when get or click
  11. Python 对json文件加密和解密
  12. Linux iperf 用法介绍
  13. 计算机规划语句,有关规划人生的句子
  14. 1625 夹克爷发红包(二进制枚举运用)
  15. “做产品的”,如何自我调节:一封家书,给同学们参考
  16. 四个锻炼方法腰椎间盘突出症全治好
  17. 基于Spring+SpringMVC+MyBatis博客系统的开发教程(四)
  18. 经典分频器——奇数分频(3分频,5分频,任意分频)
  19. typedef 范例解析
  20. 微信群裂变文案微信群裂变软件

热门文章

  1. ext4 文件系统的优化
  2. 国内首部高尔夫商战小说《手腕》(林健锋著)
  3. jboss5 启动时报HsqlException:length must be specified in type definition:VARBINARY错误
  4. 最小字典序问题java版
  5. python--windows下安装BeautifulSoup
  6. 关于silverlight5 打印功能收集
  7. Redis与Memcached简要比较
  8. [Linux] set dev label(设置分区卷标)
  9. 设计强大的云应用程序
  10. Knockout2.x:ko.dataFor()、ko.contextFor()使用