AOP学习总结

摘要:
OOP引入了封装、继承和多态的概念,以建立一个对象层次结构来模拟一组公共行为。相反,AOP技术使用一种名为“横切”的技术来剖析封装对象的内部,将影响多个类的公共行为封装到一个可重用模块中,并将其命名为“方面”,即方面。AOP将软件系统分为两部分:核心关注点和横切关注点。在AOP中,您可以定义切入点来捕获相关方法的调用。一些AOP工具也将其称为mixin。

参考:什么是AOP?

OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。

AOP技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。

AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。

实现AOP的技术,主要分为两大类:

1. 一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;

2. 二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。

实现AOP的技术特性:

1、 join point(连接点):是程序执行中的一个精确执行点,例如类中的一个方法。它是一个抽象的概念,在实现AOP时,并不需要去定义一个join point。

2、 point cut(切入点):本质上是一个捕获连接点的结构。在AOP中,可以定义一个point cut,来捕获相关方法的调用。

3、 advice(通知):是point cut的执行代码,是执行“方面”的具体逻辑。

4、 aspect(方面):point cut和advice结合起来就是aspect,它类似于OOP中定义的一个类,但它代表的更多是对象间横向的关系。

5、 introduce(引入):为对象引入附加的方法或属性,从而达到修改对象结构的目的。有的AOP工具又将其称为mixin。

clip_image001

用途:

l Authentication 权限

l Caching 缓存

l Context passing 内容传递

l Error handling 错误处理

l Lazy loading 懒加载

l Debugging 调试

l logging, tracing, profiling and monitoring 记录跟踪 优化 校准

l Performance optimization 性能优化

l Persistence 持久化

l Resource pooling 资源池

l Synchronization 同步

l Transactions 事务

其它参考:

1. AOP是什么?

2. 百度百科-面向切面编程

.NET Framework中的AOP技术

.NET原生的AOP技术实现:

l 使用Decorator Pattern实现,参考《Head First Design Patterns》第三章

l 使用.NET Remoting(RealProxy,ContextBoundObject),

a) 参考RealProxy 类The simplest AOP scenario in C#

b) 使用Dynamic Proxy Pattern,参考Dynamic Decorator PatternAdd Aspects to Object Using Dynamic DecoratorDynamic Decorator and Castle DynamicProxy Comparison

c) .Net平台AOP技术研究在.Net中关于AOP的实现(补遗)

第三方的.NET AOP框架:

l 动态代理技术

n Castle DynamicProxy

n Spring.NET AOP

n Enterprise Library

n PostSharp

n Encase

n LOOM.NET(同时提供动态和静态两种方式)

l 静态织入:

n Eos-AOP

n ASPECTDNG

n RAIL - Runtime Assembly Instrumentation Library(静态横切)

Using Decorator Pattern:

clip_image003

Using .NET Remoting

clip_image005

Using Castle DynamicProxy

参考:

l Document of Castle DynamicProxy

l Castle Dynamic Proxy - 2.2

l DYNAMIC PROXY TUTORIAL

l Castle's DynamicProxy for .NET

clip_image006

Using Spring.NET

参考:

l Reference Manual and API

clip_image008

clip_image010

各种方式优缺点比较:

方式

优点

缺点

使用Decorator Pattern实现

 

l 需要实现大量的Decorator

l Decorator不能复用(和用AOP之前同样的问题)

使用.NET Remoting

 

l must extend MarshalByRef or ContextBoundObject (which carries another semantic)

l mess with your object model hierarchy

Castle DynamicProxy

l Good Performance

 

Spring.NET AOP

l 强大的配置

 

免责声明:文章转载自《AOP学习总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇毕业设计 python opencv实现车牌识别 形状定位针式PKM帮助三:知识点的新增、删除及文件关联和设置颜色下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[解决方法] spring-mongo mongodb 2.x 升级到 3.x 配置中出现的一些问题

问题1: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'roleDaoImpl': Injection of resource dependencies failed; nested exception is org.sprin...

springBoot AOP环绕增强、自定义注解、log4j2、MDC

(一)log4j2 maven配置 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId>...

spring学习(三) ———— spring事务操作

     前面一篇博文讲解了什么是AOP。学会了写AOP的实现,但是并没有实际运用起来,这一篇博文就算是对AOP技术应用的进阶把,重点是事务的处理。                                       --wh 一、jdbcTemplate         什么是JdbcTemplate?             spring提供用...

YII2框架集成go!aop

AOP实践:YII2框架本身拥有一个功能,叫做行为.它可以动态的为当前的类附加额外的功能,但这种功能在代码层级结构是静态的,有侵入性的。下面以YII2框架集成go!aop库为例,介绍在YII2中如何实现AOP编程.(go!aop简介,可以参考go!aop的官网.)由于YII框架拥有自己的类加载器,所在集成go!aop的时候,不能正常的工作,所以要将其禁用掉...

spring5 源码深度解析----- AOP代理的生成

在获取了所有对应bean的增强后,便可以进行代理的创建了。回到AbstractAutoProxyCreator的wrapIfNecessary方法中,如下所示: 1 protected static final Object[] DO_NOT_PROXY = null; 2 3 protectedObject wrapIfNecessary(Obje...

mysql把表(表已有数据)的某列属性由空到非空,以及常用列操作

//先把CLSF_ID为空的设置默认值 UPDATE aop_dictionaries_info SET CLSF_ID='0' WHERE CLSF_ID='' OR CLSF_ID IS NULL; //把CLSF_ID设置为非空 ALTER TABLE aop_dictionaries_info CHANGE CLSF_ID CLSF_ID varc...