CleanAOP--简介

作者:立地(欧文)
邮箱:jarvin_g@126.com

导语:

AOP为Aspect Oriented Programming的缩写。 意为:面向切面编程。将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。

一:认识Aop

在日常的编程任务中,很多的代码都是进行一些通用的功能(日志、检测、一层处理等等),然后代码都是机械般的复制粘贴,实际上的业务逻辑代码只占不多的份额。那么,aop能更好的组织通用的代码、然后以标记的方式让某个方法切入,使得业务逻辑和通用代码分离,使其互不影响。

使用Aop的优点

  • 容易扩展新的切面。
  • 业务逻辑与切面逻辑解耦合。
  • 对修改封闭、对扩展开放。

使用Aop的缺点

  • 对于一些已存在修饰符的方法无法使用,需添加外围方法包含。

CleanAop支持语言

版本历史

最新版本:v2.0.0

  • v1.0.0:框架搭建完成、支持同步异步、提供Demo切面(错误捕获,log,时间记录)、前后切面选择。
  • v2.0.0:
    1. 拦截面切入方式改变,优化代理类生成方式。
    2. 使用AOP的类不能有带参构造函数bug修复。

哪里下载?

  1. github地址
  2. 网盘下载:

Demo测试案例

  1. 多切面、同步

    [TryCatchAttrubute]
    [LogAopAttrubute]
    [TimeAop]
    public virtual void DoWord()
    {
    throw new Exception("错误测试");
    Debug.WriteLine("123");
    }

    结果:

    开始捕捉异常([TryCatchAttrubute])
    开始执行([LogAopAttrubute])
    2015/11/5 0:47:19([TimeAop])
    错误测试(异常捕获处理)
    执行中([LogAopAttrubute])
    执行结束,Void DoWord()方法([LogAopAttrubute])
    2015/11/4 23:47:19 [TimeAop])
  2. 多切面、异步

    [TryCatchAttrubute]
    [LogAopAttrubute]
    [TimeAop]
    public virtual async Task DoWord()
    {
    await GetValueAsync(1234.5123, 1.01);
    Debug.WriteLine("123");
    throw new Exception("错误测试");
    Debug.WriteLine("123");
    }

    结果:

    开始捕捉异常([TryCatchAttrubute])
    开始执行([LogAopAttrubute])
    2015/11/5 1:05:23([TimeAop])
    执行中([LogAopAttrubute])
    123
    处理错误,错误信息为:错误测试([TryCatchAttrubute])
    执行结束,System.Threading.Tasks.Task DoWord()方法([LogAopAttrubute])
    2015/11/5 0:05:23([TimeAop])

.NET AOP微型框架发布 --CleanAOP的更多相关文章

  1. MVC微型框架---------学习

    1.单一入口机制 是指在web程序中 所有的请求都指向一个脚本文件 2.工厂模式的概念精髓:工厂类就是对类的封装,类是对方法的封装,方法是对实现过程的封装调用当前类的静态方法,规范的写法是使用 sel ...

  2. Tao 1.2.0图形框架发布

    Tao 1.2.0图形框架发布         Tao图形框架是方便在Mono和.Net环境下进行游戏相关开发的库绑定和实用工具集.目前,对以下库提供支持: Cg - [Cg website] Dev ...

  3. PHP之MVC微型框架简单搭建

    好长时间没有写博客了,这段时间过得紧张的不行,以致于都没有抽出时间来好好的总结一下自己这段时间的生活和学习. 其实今天不想写什么技术博客,就想简单总结一下这段时间的生活.10月8号从家里回来以后决定自 ...

  4. 开源的.Net ORM微型框架SuperHelper

    SuperHelper——灵活通用的.开源的.Net ORM微型框架 SuperHelper是博主利用业余时间编写的一个ORM微型框架,除了可以提高开发效率,与其它ORM框架相比,博主更加喜欢Supe ...

  5. php源码建博客4--实现MVC结构微型框架

    主要: 常量优化路径 自动加载类 优化入口文件 安全访问项目目录 --------------文件结构:-------------------------------------- blog├─App ...

  6. SuperHelper——灵活通用的、开源的.Net ORM微型框架

    SuperHelper是博主利用业余时间编写的一个ORM微型框架,除了可以提高开发效率,与其它ORM框架相比,博主更加喜欢SuperHelper的使用简单.适用范围广的特点. 简介 SuperHelp ...

  7. AOP日志框架实现

    AOP日志框架实现 JDK动态代理实现日志框架 首先,在项目包com.ay.test 下创建业务接口类BusinessClassService,具体代码如下: BusinessC lassServic ...

  8. 结合 AOP 轻松处理事件发布处理日志

    结合 AOP 轻松处理事件发布处理日志 Intro 前段时间,实现了 EventBus 以及 EventQueue 基于 Event 的事件处理,但是没有做日志(EventLog)相关的部分,原本想增 ...

  9. 使用dubbo分布式服务框架发布服务及消费服务

    什么是DUBBO DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案. 准备工作 安装zookeeper ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服 ...

随机推荐

  1. DIV盒子介绍

    1.盒子模型=网页布局的基石,由四部分组成: 边框(border).外边距(margin).内边距(padding).盒子中的内容(content) 2.设置顺序是顺时针:上.右.下.左. 三个值(上 ...

  2. Eclipse 安装spring插件spring tool suite(STS)

    安装方法有2种,一种是在线安装,比较方便,但耗时较长,一种是离线安装,步骤复杂一些,但耗时少,下面请看详细步骤. 方法一:在线安装     1:打开eclipse菜单Help>Eclise Ma ...

  3. python2和python3中列表推导式的变量泄露问题

    Python 2.x 中,在列表推导中 for 关键词之后的赋值操作可能会影响列表推导上下文中的同名变量.像下面这个 Python 2.7 控制台对话: Python 2.7.15 (default, ...

  4. WPF中后台代码停止RepeatBehavior=RepeatBehavior.Forever的办法

    1.在使用Begin()方法启动动画的时候,要将isControlable设置成true,就是Begin方法的第二个参数  scanningStoryBoard.Begin(this,true);// ...

  5. Android6.0.1 移植:显示系统(一)--测试framebuffer

    #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/sta ...

  6. shell脚本生成服务器密码

    #!/bin/bash len=90 str=(a b c d e f g h i j k l m n o p q r s t u vw x y z A B C D E F G H I J K L M ...

  7. amazeui笔记-Cookie

  8. json的使用(JObect,JsonData,JArray)

    JObect与JsonData的区别 JsonData是JObect的简化版本 2.转换过程容易出的bug JsonData:当里面存在null就无法转换 解决方案: JsonData teamjd ...

  9. 基于ASP.NET Core 创建 Web API

    使用 Visual Studio 创建项目. 文件->新建->项目,选择创建 ASP.NET Core Web 应用程序. 基于 ASP.NET Core 2.0 ,选择API,身份验证选 ...

  10. Java - 接口还是抽象类

    Java有两种机制可以为某个抽象提供多种实现——Interface和abstract class. Interface 和 abstract class, 除了比较明显的区别(也就是能否提供基本实现) ...