深入浅出AOP(一)
来源:互联网 发布:ubuntu 桌面壁纸 编辑:程序博客网 时间:2024/06/03 08:56
动态代理实现AOP:
AOP其实很早之前按照做出来了一些东西,之所以不敢说做出来了,是因为它是什么?怎么实现?做出来的东西是不是?先前一直查资料,查到的资料跟着做,到后来发现,AOP越来越大,而很多资料跟AOP本身的思想有冲突的地方,所以还有很多要学习的地方。
AOP的作用:
可以动态的添加和删除在切面上的漏记而不影响原来的执行代码。
AOP代理实现:
静态代理实现:
用图说明一下下:
接口实体类:
<span style="font-size:18px;"> namespace AOP_Test1 { //实体类 public class User { public int id { get; set; } public String name { get; set; } public String password { get; set; } //重写方法 public override string ToString() { return "id:" + id + ";name:" + name + ";password:" + password; } } } </span>
接口类:
<span style="font-size:18px;">namespace AOP_Test1 { //接口,数据操作 public interface IUser { void delete(User user); void update(User user); } } </span>
真正的实现类:
<span style="font-size:18px;">using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace AOP_Test1 { //IUser接口实现 public class IUserImpl:IUser { public void delete(User user) { System.Console.WriteLine("删除用户"); } public void update(User user) { System.Console.WriteLine("更新用户"); } } } </span>
静态代理类:
<span style="font-size:18px;"> namespace AOP_Test1 { //IUser装饰类 public class IUserDecorator : IUser { public IUser iuser { get; set; } public IUserDecorator(IUserImpl iUserImpl) { iuser = iUserImpl; } //删除 public void delete(User user) { beforeDelete(user); iuser.delete(user); afterDelete(); } protected void beforeDelete(User user) { Console.WriteLine(DateTime.Now + ":删除之前进行数据备份:"); Console.WriteLine("备份数据:" + user.ToString()); } protected void afterDelete() { Console.WriteLine("删除操作完成."); } //更新 public void update(User user) { beforeUpdate(user); user.name = "TanWeijie"; iuser.update(user); afterUpdate(user); } protected void beforeUpdate(User user) { Console.WriteLine(DateTime.Now + ":更新之前进行数据备份:"); Console.WriteLine("更新前数据:" + user.ToString()); } protected void afterUpdate(User user) { Console.WriteLine("更新操作完成."); Console.WriteLine("更新后数据:" + user.ToString()); } } } </span>
运行时:
<span style="font-size:18px;"> static void Main(string[] args) { User user = new User(); user.id = 1; user.name = "Tan"; user.password = "123456"; IUser iuser = new IUserDecorator(new IUserImpl()); iuser.delete(user); Console.WriteLine(); iuser.update(user); } </span>
在上面我们可以看到,这是AOP的一个初步的模型,或者说这个不是真正意义上的AOP。
总结
上面的代码AOP是这样实现的:
而其实最简单的AOP是这样的:
未完待续。。。。。
2 0
- 深入浅出AOP(一)
- 深入浅出AOP(三)--WCF+AOP
- 深入浅出Spring(三) AOP详解
- 深入浅出Spring(三) AOP详解
- 深入浅出AOP(二)--IOC容器
- 深入浅出Spring(二) AOP详解
- 深入浅出AOP(四)--AOP的实现步骤
- 深入浅出MFC(一)
- 深入浅出Flashcache(一)
- 深入浅出Flashcache(一)
- MFC深入浅出 (一)
- 深入浅出Mysql(一)
- 深入浅出傅里叶变换(一)
- ES6深入浅出(一)
- 深入浅出Docker(一)
- 深入浅出ES6(一)
- Spring AOP (一)
- AOP框架(一)
- eclipse中hibernate配置文件自动提示
- 自动登录界面
- leetcode--CourseScheduleII
- 关于编译报错“dereferencing pointer to incomplete type...
- HDU ACM 5273 Dylans loves sequence->DP
- 深入浅出AOP(一)
- Eclipse常用快捷键
- “概要设计说明书”编写规范
- hdu 2066 一个人的旅行
- C# 判断字符串是否为数字
- 数组
- numberprogressbar开源项目的介绍
- 随手指拖动而变色的ScrollView
- Eclipse修改Project的目录位置