Spring.NET 与 AOP 初窥1
(方面:如有错误,请勿喷,评论即可)
1.开始
什么是AOP?关于它的详细内容,可以自己用google搜索一下,能找到很多有趣的内容。事实上,现在的AOP只是对OOP的一个补充,还没有到达一个语言级别。 对于java世界里的AspectJ,我目测它的实现原理应该只是java的元编程(正如spring做的那样,只不过它提供了类似语法糖一样的东西,如果我理解错了,请java的同学们不要喷我)。
2.Spring
可以去下载它的最新版本,http://www.springsource.org/download/community exe安装版
3.现学现卖
我先简单介绍一下AOP(参照第1条), aspect 意思可以有 切面、横面、方面或者侧面,维基百科上面写的是侧面。 如果把OOP看做纵向的编程(继承,方法调用等等),那么AOP就是横向的编程。
4.OOP举例
日志是一个很好的例子,有一个在AOP观点中很搓的实现(我敢说大部分人都是这么实现的),就是trycatch 一段程序,在catch里写日志调用的方法,如果还要记录info,可能在程序某个地方写 logger.info
public void SomeBusinessMethod(){
logger.Info(".........");
try{
Operate();
}catch(Exception e){
logger.Error(e.Message);
}
finally{
Hehe();
}
logger.info();
}
5.AOP的反驳
呵呵,如果业务逻辑中这样的方法有上百个(其实也不用上百个,30个即可),你这样一个一个去实现日志功能,我敢打赌你写到第10个就感到厌倦了——重复代码。也有人可能说,可以用一个Context实现,对于日志这个例子,也许能省掉trycatch语句块,但你还是得一便一遍的调用info error等方法。
也许在 ASP.NET中,你可以看见 Page.OnError方法 ,或者Controller.OnException方法来处理异常,Page.OnLoad ,Page.OnUnload,Controller.OnActionExecuting,Controller.OnActionExecuted方法,但这事实上已经有点AOP的味道了
是的,你可以在把方法调用前,方法返回后或者异常作为连接点,通过切入点指定这些连接点做什么(通知)
6.解决方案——Spring.NET
参照第2条,安装完Spring后,在开始菜单招到Spring.NET,然后打开AOP示例项目 (example)

Common项目包含了Aspects和Commands的几个类,ServiceCommand实现了ICommand的三个成员
把Step1 设为启动项目, 打开Program.cs, 可以看到它用了ProxyFactory代理了ServiceCommand,然后给它增加了三个方面并创建了代理对象,最后调用代理对象的三个方法。详细代码可以在示例项目中找到。 注释表明了,这是一个programmatically (编程实现AOP)
// Create AOP proxy programmatically.
ProxyFactory factory = new ProxyFactory(new ServiceCommand());
factory.AddAdvice(new ConsoleLoggingBeforeAdvice());
factory.AddAdvice(new ConsoleLoggingAfterAdvice());
factory.AddAdvice(new ConsoleLoggingThrowsAdvice());
ICommand command = (ICommand)factory.GetProxy();
command.Execute();
if (command.IsUndoCapable)
{
command.UnExecute();
}
截图如下(为了醒目起见,我加了点分隔线)

这样就为每个方法的前与后动态地添加了行为,这些行为就是通知(Advise)。
结合日志的例子,我们就可以很方便的为每个业务方法加上这些Advise,然后做日志操作,事实上示例项目做的就是日志。
可以看到有很多Advise——Before,After,Around(环绕)和ThrowAdvise
Spring.NET 与 AOP 初窥1的更多相关文章
- SSM-Spring-08:Spring的静态代理初窥案例
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 静态代理 java的设计模式的代理模式,就是静态代理 写在前面的话,静态代理的优点和缺点 优点:可以在不改变一 ...
- 初窥ElasticSearch
初窥ElasticSearch 官网上面的,不知道讲的是什么.. youtube上面有一个start with,内容是在windows以下跑这个elastic search,然后用一个fidler工具 ...
- Spring Boot2(六):使用Spring Boot整合AOP面向切面编程
一.前言 众所周知,spring最核心的两个功能是aop和ioc,即面向切面和控制反转.本文会讲一讲SpringBoot如何使用AOP实现面向切面的过程原理. 二.何为aop aop全称Aspec ...
- Spring 3.0 AOP (一)AOP 术语
关于AOP.之前我已写过一个系列的随笔: <自己实现简单的AOP>,它的关注点在于实现.实现语言是C#,实现方式为 自定义实现 RealProxy 抽象类.重写Invoke方法,以便进行方 ...
- Spring系列之AOP实现的两种方式
AOP常用的实现方式有两种,一种是采用声明的方式来实现(基于XML),一种是采用注解的方式来实现(基于AspectJ). 首先复习下AOP中一些比较重要的概念: Joinpoint(连接点):程序执行 ...
- Scrapy001-框架初窥
Scrapy001-框架初窥 @(Spider)[POSTS] 1.Scrapy简介 Scrapy是一个应用于抓取.提取.处理.存储等网站数据的框架(类似Django). 应用: 数据挖掘 信息处理 ...
- 初窥Kaggle竞赛
初窥Kaggle竞赛 原文地址: https://www.dataquest.io/mission/74/getting-started-with-kaggle 1: Kaggle竞赛 我们接下来将要 ...
- scrapy2_初窥Scrapy
递归知识:oop,xpath,jsp,items,pipline等专业网络知识,初级水平并不是很scrapy,可以从简单模块自己写. 初窥Scrapy Scrapy是一个为了爬取网站数据,提取结构性数 ...
- WWDC15 Session笔记 - Xcode 7 UI 测试初窥
https://onevcat.com/2015/09/ui-testing/ WWDC15 Session笔记 - Xcode 7 UI 测试初窥 Unit Test 在 iOS 开发中已经有足够多 ...
随机推荐
- JS作用域及call
<script type="text/javascript"> function log(val){ console.log(val); } function base ...
- ABAP开发顾问必备:SAP ABAP开发技术总结
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Spring事务属性的介绍
Spring声明式事务让我们从复杂的事务处理中得到解脱.使得我们再也无需要去处理获得连接.关闭连接.事务提交和回滚等这些操作.再也无需要我们在与事务相关的方法中处理大量的try-catch-final ...
- hihoCoder 1430 : A Boring Problem(一琐繁题)
hihoCoder #1430 : A Boring Problem(一琐繁题) 时间限制:1000ms 单点时限:1000ms 内存限制:256MB Description - 题目描述 As a ...
- validate插件深入学习-04自定义验证方法
自定义验证方法 jQuery.validator.addMethod(name,method,[,message]) name: 方法名 method: function(value,element, ...
- JavaScript中的数组遍历forEach()与map()方法以及兼容写法
原理: 高级浏览器支持forEach方法 语法:forEach和map都支持2个参数:一个是回调函数(item,index,list)和上下文: forEach:用来遍历数组中的每一项:这个方法执行是 ...
- 关于Tomcat在eclipse上的配置
一:安装JDK(建议版本比较新的jdk,因为有很多集成于jdk软件需要的jdk版本比较高): jdk官网下载位置:http://www.oracle.com/technetwork/java/java ...
- 隐藏原生html5 video controls
隐藏原生html5 video controls 凤凰视频焦点项目mobile html5播放器测试时bug,由于没有用原生的controls而是自己写的custom controls,虽然设置了co ...
- iOS UIWebView重定向Cookie
// 1. 取出当前的cookies NSArray<NSHTTPCookie *> *cookies = [NSHTTPCookieStorage sharedHTTPCookieSto ...
- html的a链接的href怎样才另起一个页面
在后面加上target ="_blank",就可以,正如: <ul class="nav navbar-nav navbar-right" style=& ...