对于OOP来说,是个树形结构,如果要实现多个子数之间的共享服务,例如很多子树都用到日志服务,这时候AOP的横切关注 cross cutting concerns就非常有用了。如果要使每个类具备一项功能,势必要修改每个需要的类结构,这样显然麻烦,而且不容易维护。AOP避免了这一点,将横切关注封装到了一个独立的单元,这样既使每个类都具备这项功能,又不破坏类的结构。Aspect,也就是一个方面,是一组可重用的代码片段,可以用来注入到已经存在的类里,而不改变类的代码。一般来说,aspect的代码会被框架处理一次,再进行代码注入code injection。注意,这里代码注入和依赖注入dependency injection是不一样的,

所谓代码注入,例如一个类需要日志服务,会在这个类需要调用日志的地方插入aspect的公共调用代码。有的AOP框架,例如PostSharp,会定义attribute,然后给需要的类的某个方法加上这个attribute,这样postsharp会把attribute里的部分代码插入到这个类的方法里。

实现AOP需要以下几个方面:

1.JoinPoints,连接点。需要某个aspect的target class的代码点,可以是方法等。可以在joinPoints的前,后,或者周围插入。

2.Pointcuts,切点。对JoinPoints的一次封装。

3.Advice or Introductions。是要插入到target class的aspect 代码段

4.Weaver。 编译器,用来执行代码注入的工具。

Unity Container应用了一个aop的feature,即interception mechanism,应用这个可以让代码有那么一点aop的意思。unity里的拦截器机制将会在指定方法的某个执行阶段,进行拦截,然后进行配置和重写目标行为。简单来说,拦截器机制就是给对象增加了行为,普通给对象加行为的方法是派生接口,但拦截机器不用修改对象的代码。Unity的interception是对decorator模式的一种实现,这种模式用来在运行时扩展对象的功能。

Unity的拦截器非常类似于一个pipeline,经过重重行为的附加filter,最终到达target class。从概念上说,分成三类,interceptor(proxy),behaviour pipeline,the behaviour(aspect)。interceptor是 拦截机制对外暴露的接口,当需要使用拦截机制时,需要使用interceptor,它检查所有已经注册的行为behaviour,把传给它的数据传给behaviour,并通过behaviour pipeline来执行这些行为。 Unity提供了两种interceptor,分别是instance interceptor 和 type interceptor,对应处理对象和类型的拦截。

关于Interception框架的更多相关文章

  1. 为了支持AOP的编程模式,我为.NET Core写了一个轻量级的Interception框架[开源]

    ASP.NET Core具有一个以ServiceCollection和ServiceProvider为核心的依赖注入框架,虽然这只是一个很轻量级的框架,但是在大部分情况下能够满足我们的需要.不过我觉得 ...

  2. NET Core写了一个轻量级的Interception框架[开源]

    NET Core写了一个轻量级的Interception框架[开源] ASP.NET Core具有一个以ServiceCollection和ServiceProvider为核心的依赖注入框架,虽然这只 ...

  3. Dora.Interception: 一个为.NET Core度身定制的AOP框架

    多年从事框架设计开发使我有了一种强迫症,那就是见不得一个应用里频繁地出现重复的代码.之前经常Review别人的代码,一看到这样的程序,我就会想如何将这些重复的代码写在一个地方,然后采用“注入”的方式将 ...

  4. AOP框架Dora.Interception 3.0 [2]: 实现原理

    和所有的AOP框架一样,我们必须将正常的方法调用进行拦截,才能将应用到当前方法上的所有拦截器纳入当前调用链.Dora.Interception采用IL Eimit的方式实现对方法调用的拦截,接下来我们 ...

  5. 全新升级的AOP框架Dora.Interception[1]: 编程体验

    多年之前利用IL Emit写了一个名为Dora.Interception(github地址,觉得不错不妨给一颗星)的AOP框架.前几天利用Roslyn的Source Generator对自己为公司写的 ...

  6. NET Core度身定制的AOP框架

    NET Core度身定制的AOP框架 多年从事框架设计开发使我有了一种强迫症,那就是见不得一个应用里频繁地出现重复的代码.之前经常Review别人的代码,一看到这样的程序,我就会想如何将这些重复的代码 ...

  7. [.NET领域驱动设计实战系列]专题九:DDD案例:网上书店AOP和站点地图的实现

    一.引言 在前面一专题介绍到,要让缓存生效还需要实现对AOP(面向切面编程)的支持.所以本专题将介绍了网上书店案例中AOP的实现.关于AOP的概念,大家可以参考文章:http://www.cnblog ...

  8. Dora.Interception,为.NET Core度身打造的AOP框架:全新的版本

    Dora.Interception 1.0(Github地址:可以访问GitHub地址:https://github.com/jiangjinnan/Dora)推出有一段时间了,最近花了点时间将它升级 ...

  9. Dora.Interception, 一个为.NET Core度身打造的AOP框架:不一样的Interceptor定义方式

    相较于社区其他主流的AOP框架,Dora.Interception在Interceptor提供了完全不同的编程方式.我们并没有为Interceptor定义一个接口,正是因为不需要实现一个预定义的接口, ...

随机推荐

  1. python操作SQL

    pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同 一.下载安装 pip3 install pymysql 二.操作使用 1.执行SQL #!/usr ...

  2. asp.net mvc 中 一种简单的 URL 重写

    asp.net mvc 中 一种简单的 URL 重写 Intro 在项目中想增加一个公告的功能,但是又不想直接用默认带的那种路由,感觉好low逼,想弄成那种伪静态化的路由 (别问我为什么不直接静态化, ...

  3. 更改Visual Studio 2015 默认的语言设置

    Vs支持多种语言,但有可能创建项目时,默认的开发语言不是你需要的,比如:默认是Visual C++ 你可以通过"工具"----选项----导入和导出设置来修改. 引用: https ...

  4. SU54 新建视图簇 维护数据表

    由于一些数据表的数据比较重要,不允许直接查看数据表中的数据或者通过SM30进行维护, 故可以通过新建一个视图簇的方式来实现,然后通过程序调用这个视图簇,来进行数据的维护. 运行事务码SE54 最后通过 ...

  5. 从头开始构建LINUX[内核更新和资料]

    了解了LFS的内容后,至于内核的更新就一目了然了 http://www.cnblogs.com/2018/p/3979305.html http://www.cnblogs.com/2018/p/39 ...

  6. 错误提示,解决方案java.lang.UnsatisfiedLinkError: Couldn't load easemobservice from loader dalvik.system.PathClassLoad

    解决方案: 在libs下面创建一个armeabi-v7a文件夹 把armeabi *.so的文件复制一份 放在armeabi-v7a运行测试通过 关于 armeabi和armeabi-v7a 区别如下 ...

  7. 安卓开发之activity详解(sumzom)

    app中,一个activity通常是指的一个单独的屏幕,相当于网站里面的一个网页,它是对用户可见的,它上面可以显示一些控件,并且可以监听处理用户的时间做出响应. 那么activity之间如何进行通信呢 ...

  8. android 音乐播放器

    本章以音乐播放器为载体,介绍android开发中,通知模式Notification应用.主要涉及知识点Notification,seekbar,service. 1.功能需求 完善音乐播放器 有播放列 ...

  9. MongoDB-常见问题

    前言        MongoDB数据库的版本为3.0.7.记录在使用MongoDB数据库时遇到的各种问题,目前是遇到一个整理一个,没有进行分类,等整理较多的时候,进行分类整理一下. 1.使用可视化工 ...

  10. 2015 MVP OpenDay 及 Community Camp 演讲PPT分享

    这两天来到首都北京参加一年一度的MVP OpenDay 和 MVP Community Camp.其中,31号下午有我的课程:What Will You Make: Windows IoT应用开发入门 ...