几种Aop实现

1. 通过继承实现

public interface IA
{
    void DoSth();
}
public class A: IA
{
    public virtual void DoSth() { }
}
public class B : A,IA
{
    public override void DoSth()
    {
        before();
        base.DoSth();
        after();
    }

    public void before() { }
    public void after() { }
} 

2. 装饰者/代理模式(由继承改作组合)

public interface IA
{
    void DoSth();
}

public class A2: IA
{
    public void DoSth() { }
}
public class B2 : IA
{
    private IA a;
    public B2(IA a)
    {
        this.a = a;
    }
    public void DoSth()
    {
        before();
        this.a.DoSth();
        after();
    }
    public void before() { }
    public void after() { }
}

3. 访问者模式

public interface IA
{
    void DoSth();
}

public class A3 : IA
{
    public void DoSth() { }

    public void Proceed()
    {
        DoSth();
    }
}
public class MyInterceptor
{
    public void Intercept(IA invocation)
    {
        before();
        if(invocation != null)
            invocation.DoSth();
        after();
    }

    public void before() { }
    public void after() { }
}

  

4.ASP.NET MVC中的拦截器。

public interface IAdditionalOp
{
    void before();
    void after();
}
public class AdditionalOp :Attribute, IAdditionalOp
{
    public void before() { }
    public void after() { }
}

public class A4
{
    [AdditionalOp]
    public void DoSth() { }
}

public class B4
{
    public void Run()
    {
        var classUnder = typeof(A4);
        var allMethods = classUnder.GetMethods();
        var methodUnder = allMethods.Where(m => m.Name == "DoSth");

        foreach (MethodInfo methodInfo in methodUnder)
        {
            Attribute[] attributes = Attribute.GetCustomAttributes(methodInfo, typeof(AdditionalOp));
            foreach (var item in attributes)
            {
                (item as AdditionalOp).before();
            }

            A4 a4 = new A4();
            a4.DoSth();

            foreach (var item in attributes)
            {
                (item as AdditionalOp).after();
            }
        }
    }
}

5. 动态代理

.NET:动态代理的 “5 + 1” 模式

时间: 2024-10-10 15:37:33

几种Aop实现的相关文章

关于AOP的理解

AOP,面向切面编程,在看传智视频的时候,看到一个很好的理解,一个很好的AOP的例子,试详解之. 最优例子:权限控制. 在权限控制中,比较原始的做法(不原始的做法我也不会)是,对每个需要控制权限的地方,通过if来判断人员的权限,而后给予或不给某权限.如: 而这个过程中,对每一个按钮.页面或者其他元素,一旦需要授权,则需要进行一番这样的判断,这个判断的过程明显的是代码重复.因此有必要将if判断分离出来,我们只有专心的做好 do xxx 的部分就好了. 把 if判断分离出来的过程,就是一种AOP的体

Spring AOP实现方式四之注入式AspectJ切面【附源码】

现在我们要讲的是第四种AOP实现之注入式AspectJ切面 通过简单的配置就可以实现AOP了. 源码结构: 1.首先我们新建一个接口,love 谈恋爱接口. package com.spring.aop; /** * 谈恋爱接口 * * @author Administrator * */ public interface Love { /* * 谈恋爱方法 */ void fallInLove(); } .csharpcode, .csharpcode pre { font-size: sma

基于 .NET 的开源AOP框架评估

Rating of Open Source AOPFrameworks in .NET 基于 .NET 的开源AOP框架评估 Introduction 引言 In the days where business agility is becoming the definite needof any business / IT infrastructure, quite frequentlywe are ending up with facing scenarios where we need t

使用Spring进行面向切面编程(AOP)

转载于http://www.blogjava.net/supercrsky/articles/174368.html 文章太长,写的很好,没看完,转过来慢慢理解,品味 简介 面向切面编程(AOP)提供另外一种角度来思考程序结构,通过这种方式弥补了面向对象编程(OOP)的不足. 除了类(classes)以外,AOP提供了 切面.切面对关注点进行模块化,例如横切多个类型和对象的事务管理. (这些关注点术语通常称作 横切(crosscutting) 关注点.) Spring的一个关键的组件就是 AOP

使用springAPI以及自定义类 实现AOP的一个例子-aop编程

Spring的另一个重要思想是AOP,面向切面的编程,它提供了一种机制,可以在执行业务前后执行另外的代码,Servlet中的Filter就是一种AOP思想的体现,下面通过一个例子来感受一下. 假设我们现在需要在针对数据库进行CRUD操作时添加一组日志,即在执行CRUD方法前后分别加上一句话,实现简单的面向切面编程的功能.我用到的是spring4,在配置文件上较之之前的版本可能有些不同. 使用springAPI来实现AOP,除了spring必不可少的核心jar包,还需要两个jar包需要导入: as

Spring AOP 问与答

AOP的实现有哪些 AOP常见的实现有: Spring AOP Aspectj Guice AOP Jboss AOP 等 AOP Alliance 是什么, 为什么Spring AOP, G UICE AOP等需要aopalliance.jar? AOP Alliance定义了AOP中的基础概念,但它并不是一种AOP的实现,它的目标为各种AOP实现提供统一的接口.Spring AOP, GUICE等都采用了AOP Alliance中定义的接口. Spring AOP 和 Aspectj的区别?

标准AOP与Spring AOP

AOP介绍 在AOP联盟的官方网站里(http://aopalliance.sourceforge.net/) AOP是一种能够增强多种已存在的中间件环境(such as J2EE)或者开发环境(e.g. Eclipse)功能的编程技术. AOP 实现方式与相关项目 关于AOP在很多项目中都有实现,实现的方式也有不同,目前主要有三种处理方式:Proxy(代理), Interceptor(拦截器), bytecode translator(字节码翻译). AOP相关的项目有: ASM: a lig

JAVA平台AOP技术研究

3.1 Java平台AOP技术概览 3.1.1 AOP技术在Java平台中的应用 AOP在实验室应用和商业应用上,Java平台始终走在前面.从最初也是目前最成熟的AOP工具——AspectJ,到目前已经融和在企业级容器JBoss中的JBoss AOP,均建立在Java平台上. 前面已经描述到,AOP的目的就是将核心关注点和横切关注点分离,实际上这就是一种分散关注(seperation of concerns)的思路.在Java平台下,如果要开发企业级的应用,非J2EE莫属.一个J2EE应用系统只

Spring学习十三----------Spring AOP的基本概念

? 版权声明:本文为博主原创文章,转载请注明出处 什么是AOP -面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 -主要的功能是:日志记录.性能统计.安全控制.事务处理.异常处理等 AOP实现方式 -预编译 -AspectJ -运行期动态代理(JDK动态代理.CGLib动态代理) -Spring AOP.Jboss AOP AOP相关概念 -切面(Aspect)   一个关注点的模块化,这个关注点可能会横切多个对象 -连接点(Joinpoint)   程序执行过程中