参考:什么是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。
用途:
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 Pattern,Add Aspects to Object Using Dynamic Decorator,Dynamic Decorator and Castle DynamicProxy Comparison
c) .Net平台AOP技术研究,在.Net中关于AOP的实现(补遗)
第三方的.NET AOP框架:
l 动态代理技术
n Encase
n LOOM.NET(同时提供动态和静态两种方式)
l 静态织入:
n Eos-AOP
n RAIL - Runtime Assembly Instrumentation Library(静态横切)
Using Decorator Pattern:
Using .NET Remoting
Using Castle DynamicProxy
参考:
l Document of Castle DynamicProxy
l Castle's DynamicProxy for .NET
Using Spring.NET
参考:
各种方式优缺点比较:
方式 |
优点 |
缺点 |
使用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学习总结的更多相关文章
-
springBoot AOP学习(一)
AOP学习(一) 1.简介 AOp:面向切面编程,相对于OOP面向对象编程. Spring的AOP的存在目的是为了解耦.AOP可以让一切类共享相同的行为.在OOP中只能通过继承类或者实现接口,使代码的 ...
-
Aop学习笔记
在学习编程这段时间我想大家都是习惯了面向过程或者面向对象的思想来编程,较少或者没有接触过面向方面编程的思想. 那么什么是面向方面(Aspect)——其实就是与核心业务处理逻辑无关的切面,例如记录日志. ...
-
spring 学习(三):aop 学习
spring 学习(三):aop 学习 aop 概念 1 aop:面向切面(方面)编程,扩展功能不修改源代码实现 2 AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码 3 aop底层使用动态代 ...
-
Spring AOP 学习例子
http://outofmemory.cn/code-snippet/3762/Spring-AOP-learn-example 工作忙,时间紧,不过事情再多,学习是必须的.记得以前的部门老大 ...
-
aop学习总结三----aop的相关概念
aop学习总结三----aop的相关概念 public Object invoke(Object proxy, Method method, Object[] args) throws Throwab ...
-
aop学习总结二------使用cglib动态代理简单实现aop功能
aop学习总结二------使用cglib动态代理简单实现aop功能 模拟业务需求: 1.拦截所有业务方法 2.判断用户是否有权限,有权限就允许用户执行业务方法,无权限不允许用户执行业务方法 (判断是 ...
-
aop学习总结一------使用jdk动态代理简单实现aop功能
aop学习总结一------使用jdk动态代理实现aop功能 动态代理:不需要为目标对象编写静态代理类,通过第三方或jdk框架动态生成代理对象的字节码 Jdk动态代理(proxy):目标对象必须实现接 ...
-
Spring入门IOC和AOP学习笔记
Spring入门IOC和AOP学习笔记 概述 Spring框架的核心有两个: Spring容器作为超级大工厂,负责管理.创建所有的Java对象,这些Java对象被称为Bean. Spring容器管理容 ...
-
AOP学习心得&;jdk动态代理与cglib比较
什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入 ...
-
AOP 学习
学习 Spring.Net 的AOP 的时候,在做一个简单的测试例子的时候,配置文件和代码逻辑都是没问题的,但始终报这样一个异常: 无法将类型为“CompositionAopProxy_1e76f37 ...
随机推荐
-
如果你的SharePoint出现了,状态服务问题,InfoPath无法正常使用
Create a new ‘State Service’ Service Application using Powershell February 14, 2012Leave a commentGo ...
-
Android LayoutInflater详解 (转)
在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例 ...
-
创建FrameWork
1, http://blog.sina.com.cn/s/blog_407fb5bc01013v6s.html] 2,使用动态库 http://www.cocoachina.com/industry/ ...
-
为 Node.js 开发者准备的 8 本免费在线电子书(转)
ode.js 是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始.比较独特的是,Node.js会假设你是在POSIX环境下运行它 Linux 或 Mac OS X.如果你 ...
-
bootstrap的流式布局
Bootstrap---Fluid layout 流布局 流布局是一种适应屏幕的做法.即不固定块的宽度,而是采用百分比作为单位来确定每一块的宽度.这种布局非常适合一次编写,然后自适应各种不同大小的屏幕 ...
-
SharedPreference对象及其xml文件
SharedPreferences对象----->getXXX SharedPreferences.Editor对象---->putXXX
-
Cloud Foundry warden container 安全性探讨
本文将从Cloud Foundry中warden container的几个方面探讨warden container的安全性. 1. warden container互訪 1.1. 互訪原理· 在Cl ...
-
文档在线预览开源实现方案三:OpenOffice + PDFRenderer + js
之前的方案无法很好地解决异构平台及不同浏览器的兼容性问题,如方案一需要客户端浏览器支持flash而移动端浏览器无法支持这点,虽然移动端浏览器支持方案二,但是一些老版本的IE浏览器无法支持,例如IE8就 ...
-
Codeforces785E - Anton and Permutation
Portal Description 对一个长度为\(n(n\leq2\times10^5)\)的数列\(a\)进行\(m(m\leq5\times10^4)\)次操作,数列初始时为\(\{1,2,. ...
-
ASP.NET -- WebForm -- Cookie的使用 应用程序权限设计 权限设计文章汇总 asp.net后台管理系统-登陆模块-是否自动登陆 C# 读写文件摘要
ASP.NET -- WebForm -- Cookie的使用 ASP.NET -- WebForm -- Cookie的使用 Cookie是存在浏览器内存或磁盘上. 1. Test3.aspx文件 ...