编程思想—面向切面编程(AOP)
谈到面向切面的编程,我们很容易关联到面向对象编程(OOP)。个人对这两种编程方式的解释为:两种编程思想只是站在编程的角度问题。
OOP注重的是对象,怎么对对象行为和方法的抽象。如何封装一个具有完整属性以及行为的对象。简单来讲,其实OOP是对一个名词的封装。
AOP注重的是行为,怎么对业务逻辑的行为进行划分。如何在逻辑复杂的系统中逻辑划分(领域划分,模块划分,读取划分等)。简单来讲,其实AOP是对一系列逻辑操作的分类。
代码示例:
定义用户User:
public class User
{
public int Id{get;set;}
public int Age{get;set;}
public string Name{get;set;}
}
对用户的操作我们可以抽象出一个获取用户信息的切面IGetUser
public interface IGetUser
{
User GetUserById(int Id);
IEnumerable<User> GetUsers();
}
实现切面IGetUser的类DefaultGetUser
public class DefaultGetUser:IGetUser
{
public User GetUserById(int id)
{
return new User{Id=,Age=,Name="TestName"};
}
public IEnumerable<User> GetUsers()
{
List<User> users=new List<User>();
for(var i=;i<;i++)
{
result.Add(new User{Id=i,Age=i*,Name=String.Format("TestName{0}",i)});
}
return result;
}
}
设置代理对象,代理方式可以是单个切面,也可以是一系列有某种关联的切面
public class GetUserProxy:IGetUser
{
private IGetUser _getUserService;
private ILog _log;
public GetUserProxy(IGetUserService getUserService,ILog log)
{
_getUserService=getUserService;
_log=log;
}
public User GetUserById(int id)
{
return _getUserService.GetUserById(id);
}
public User GetUsers()
{
var result= _getUserService.GetUsers();
//代理类逻辑填充
System.Threading.Tasks.Task.Factory.StartNew(()=>_log.Log("p批量读取用户信息"));
return result;
}
}
最后就是上层对代理类的调用了,因为代理类中注入了关联的切面接口。我们可以考虑使用IOC框架来实例化代理,当然也可以自己通过反射方式注入代理类构造参数来实例化代理类。
不同的IOC框架实现方式不一样,如果只是简单的测试可以考虑StructMap,Autofac等。
Spring.Net 对AOP 的诠释更为全面推荐了解Spring.Net;
编程思想—面向切面编程(AOP)的更多相关文章
- 轻松理解AOP思想(面向切面编程)
本文旨在帮助还没有理解AOP的童鞋看透弄懂AOP,也欢迎高手批评指正. 先说一个Spring是什么吧,大家都是它是一个框架,但框架这个词对新手有点抽象,以致于越解释越模糊,不过它确实是个框架的,但那是 ...
- [转]轻松理解AOP思想(面向切面编程)
原文链接 Spring是什么 先说一个Spring是什么吧,大家都是它是一个框架,但框架这个词对新手有点抽象,以致于越解释越模糊,不过它确实是个框架的,但那是从功能的角度来定义的,从本质意义上来讲,S ...
- 杂项-编程:AOP(面向切面编程)
ylbtech-杂项-编程:AOP(面向切面编程) 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一 ...
- 【转】 AOP(面向切面编程)、Filter(过虑器)、Interceptor(拦截器)
AOP(面向切面编程) 面向切面编程(AOP是Aspect Oriented Program的首字母缩写) ,我们知道,面向对象的特点是继承.多态和封装.而封装就要求将功能分散到不同的对象中去,这在软 ...
- 03-spring框架—— AOP 面向切面编程
3.1 动态代理 动态代理是指,程序在整个运行过程中根本就不存在目标类的代理类,目标对象的代理对象只是由代理生成工具(不是真实定义的类)在程序运行时由 JVM 根据反射等机制动态生成的.代理对象与目标 ...
- 面向切面编程--AOP(转)
add by zhj:面向切面编程就是在不修改函数A的前提下,在函数A前后插入业务逻辑B, C, D...这其实算是功能分解,将大模块S=A+B+C+D+……分解为独立的小功能A,B,C,D……,模块 ...
- 什么是面向切面编程AOP--知识点汇总
最近在学这方面的内容,读到的这段话我感觉说的很清楚了:这种在运行时,动态地将代码切入到类的指定方法.指定位置上的编程思想就是面向切面的编程. 面向切面编程(AOP是Aspect Orie ...
- java面试题之 -----面向切面编程
这种在运行时,动态地将代码切入到类的指定方法.指定位置上的编程思想就是面向切面的编程. 面向切面编程(AOP是Aspect Oriented Program的首字母缩写) ,我们知道,面向对象的特点是 ...
- 如何通俗的理解spring的控制反转、依赖注入、面向切面编程等等
之前一直不理解spring的一些基础特性是什么意思,虽然网上的解释也很多,但是由于我比较笨,就是看不懂,知道最近才稍微了解,下面就以通俗讲解的方式记录下来. 前言 假设我是一个没有开店经验的小老板,准 ...
随机推荐
- MISCONF Redis is configured to save RDB snapshots
今天客户突然反馈用我们的api出现了下面的这个错误 MISCONF Redis is configured to save RDB snapshots, but is currently not ab ...
- centos7 搭建 docker 环境
1. 安装centos7 http://isoredirect.centos.org/centos/7/isos/x86_64/ 下载 everything 版本,最小化版本可能缺失很多东西 我是在 ...
- ctrl+z的JAVA实现,借助了命令模式(command pattern)
前些天学习<<JAVA与模式>>,到命令模式时,随带给了一个CTRL+Z案例的实现,想来学习编程这么久,CTRL+Z还没有认真实现过. 因此,借助JAVA与模式里面的源代码,自 ...
- Ubuntu14.04搭建cocos2dx2.2.5开发环境(超级具体)
一 下载解压 官方下载地址:http://www.cocos2d-x.org/download 下载下来之后解压完毕之后会得到一个文件夹cocos2d-x-2.2.5 二 编译 1 安装依赖 cd到c ...
- WPF button 圆角制作
将以下节点复制到app.xaml的<Application.Resources>节点下 <Style TargetType="{x:Type Button}"&g ...
- EasyUI-页面布局
通过使用 jQuery EasyUI 可以很容易地添加 Tabs.您只需要调用 'add' 方法即可. 在本教程中,我们将使用 iframe 动态地添加显示在一个页面上的 Tabs. 当点击添加按钮, ...
- ios9中 UIStackView的使用
ios9中 UIStackView的使用 by 伍雪颖 UIStackView能够垂直或水平排布多个subview, 自己主动为每一个subview创建和加入Auto Layout constrain ...
- 第一个Android项目——计算器
第一个Android项目——计算器 效果 开始学Android一两个星期了,学习了一下基本的Activity.简单控件及几个简单布局,打算找个东西来练练手,于是就选择发计算器.关于计算器中用到的四则运 ...
- oracle数据库使用之数据查询入门
1.在查询过程中使用算术表达式对数据进行运算 student表结构如下: 最后一项salary表示每个人的月薪,我现在想查询每个人的年薪: 2.使用nvl函数处理null值,向表中插入一条数据,该数据 ...
- 读者汇app项目案例源码
这款app是我花一周左右时间做出来的,一款阅读笑话,段子,糗事,脑筋急转弯,神回复,语录,谜语等的休闲娱乐app,用户除了可以浏览他人发布的内容外,自己也可以发布相关内容,和其他人一同分享有趣的内容, ...