AOP的一些概念和LOOM.NET

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

面向侧面的程序设计(aspect-oriented programming,AOP,又译作面向方面的程序设计、观点导向编程)是计算机科学中的一个术语,指一种程序设计范型。该范型以一种称为侧面(aspect,又译作方面)的语言构造为基础,侧面是一种新的模块化机制,用来描述分散在对象、类或函数中的横切关注点(crosscutting concern)。

以上是AOP在维基百科的概念,抽象晦涩。下面写一点本人的理解。如有错误,欢迎指出,不甚感激。


AOP中的涉及到的概念很多,眼花缭乱。但是AOP的思想却是很简单。就是分离代码。将最常用的,全局的方法分离出来,横向穿插到系统主干代码中。所谓横向穿插,就是这些代码并不是直接在主干代码中调用,而是通过某些机制,(比如反射等),在定义好的连接点处触发这些代码。连接点其实就是定义了何时触发代码。

AOP通常用在实现捕获异常,追踪异常,安全校验和失败注入等。在OO编程中,类和方法设计成执行专门的操作,一些常用的方法都被分散到公共类中。然而,有很多 (横切关注点)cross-cutting concerns穿越所有的类和方法,比如记录日志,权限检测。OOP中,用户定义不同的日志类和权限检测,在需要记日志或者权限校验的类或者方法中,调用这些日志类和权限类,部分的解决了这些问题。采用AOP,可以优雅的解决掉这些问题。

AOP中所谓的“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。通俗的说,就是把那些用来横插的函数,封装起来,在特定的时候就调用这些函数。因此,方面也就可以理解为用来横插的函数的封装库。这些方法在连接点处和目标方法编织。所谓编织,就是调用目标方法,必定会触发横插方法。

AOP中编织的方式有2种。分为动态和静态。

静态AOP系统诸如AspectJ,在编译时或者载入的时候编织 。 编织后的方面不能在运行时删除或者配置。静态编织通常通过实现MSIL或者字节码的重写来实现。

动态AOP系统可以在运行时编织方面。程序员在程序运行的时候动态的配置方面。

AOP系统的典型实现,无论静态编织还是动态编织,通常都是在执行点插入钩子(hook)。

这个执行点就是所谓的连接点。程序执行到连接点。钩子会拦截程序,并调用一段称作通知(advice)的代码。不同的通知可关联不同的切入点。一个方面就是一对切入点和通知。

静态编织的AOP中,hook通常由内嵌在代码中,通过静态翻译源代码或者字节码植入。

带编织的AOP,必须在每个连接点检测是否需要执行通知(advice)。在动态AOP中,所以的连接点都依赖于执行上下文,因为连接点是在运行时指定,有时还是动态的改变。因此,在连接点被改变后,必须重新检测是不是需要执行通知。


目前成熟的AOP语言要数AspectJ,是用于Java的。.NET中,比较成熟的比如 AspectDNG, Aspect#,PostSharp ,LOOM.NET。

LOOM.NET是一套开源的AOP系统,它有同时支持动态编织和静态编织。

动态编织的话,通过引入 RapierLoom.dll 程序集,编织过程在运行时由一个工厂类初始化。初始化的时候通过Create or CreateInstance 方法生成编织对象。

静态编织的话,编织过程发生在编译后。通过Gripper-LOOM.NET,在生成的程序集中重写入一些额外的“胶水代码”。编织步骤如下:首先生成.NET程序集,再对程序集运行命令行gl.exe。

clipboard

对于LOOM.NET的更多了解,访问官网:http://www.rapier-loom.net/

以上是一些拙见,如有错误,欢迎指出,不甚感激。


















本文转自cnn23711151CTO博客,原文链接:http://blog.51cto.com/cnn237111/924752 ,如需转载请自行联系原作者

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
7月前
|
数据库
AOP(面向切面编程)的基本概念和原理
AOP(面向切面编程)的基本概念和原理
483 0
|
Java 测试技术 Spring
Spring入门&控制反转(或依赖注入)&AOP的关键概念& 多配置文件&与web集成(二)
Spring入门&控制反转(或依赖注入)&AOP的关键概念& 多配置文件&与web集成
|
6月前
|
Java Maven 数据安全/隐私保护
详解 Java AOP:面向方面编程的核心概念与 Spring 实现
详解 Java AOP:面向方面编程的核心概念与 Spring 实现
96 1
|
4月前
|
监控 安全 数据库
面向方面编程(AOP)的概念
【8月更文挑战第22天】
87 0
|
6月前
|
XML Java 数据格式
Spring5系列学习文章分享---第三篇(AOP概念+原理+动态代理+术语+Aspect+操作案例(注解与配置方式))
Spring5系列学习文章分享---第三篇(AOP概念+原理+动态代理+术语+Aspect+操作案例(注解与配置方式))
57 0
|
6月前
|
设计模式 SQL Java
Spring框架第四章(AOP概念及相关术语)
Spring框架第四章(AOP概念及相关术语)
|
7月前
|
Java Spring
Spring中得Aop相关概念及运用
Spring中得Aop相关概念及运用
|
7月前
|
Java Spring
Javaweb之SpringBootWeb案例之AOP核心概念的详细解析
Javaweb之SpringBootWeb案例之AOP核心概念的详细解析
39 0
|
7月前
|
SQL 缓存 Java
【Spring】AOP底层原理(动态代理)-》 AOP概念及术语 -》 AOP实现
【Spring】AOP底层原理(动态代理)-》 AOP概念及术语 -》 AOP实现
121 0
|
7月前
|
XML Java 数据格式
Spring-AOP简介、核心概念、入门案例及工作流程
Spring-AOP简介、核心概念、入门案例及工作流程
132 0