动态代理实现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是这种:

未完待续。

。。。

最新文章

  1. 求CRC校验和的低位和高位的两种方式
  2. 评价photoshop
  3. 环回接口(loopback interface)的新认识
  4. WPF控件--利用Winform库中的NotifyIcon实现托盘小程序
  5. css 选择器优先级的计算过程
  6. iOS开发——项目实战OC篇&amp;类QQ黏性按钮(封装)
  7. hud 1241 Oil Deposits
  8. DirectShow初探
  9. hdu 5269 ZYB loves Xor I(字典树)
  10. Appium的iOS环境搭建
  11. 持续交付之软件包管理maven篇
  12. liunx搭建DHCP服务器以及DHCP中继服务器
  13. QTP自动化测试-按行取值(win10下输入?问题)-笔记20181119
  14. 常用6种type的form表单的input标签分析及示例
  15. 2 springboot多模块项目
  16. soj1762.排座椅
  17. Android ViewGroup等容器控件的使用
  18. CentOS6.5系统服务
  19. oracle之 12.1.0.1.0 C 在 linux 7 上安装报错处理
  20. ExtJs之表单(form)

热门文章

  1. 制作SD更新系统时和用mfgtool工具烧录时,文件如何替换?
  2. Swift 中的Range和NSRange不同
  3. RN传参的问题
  4. Linux下安装Redis5.0.2
  5. mysql5.7配置
  6. Python爬虫-Scrapy-CrawlSpider与ItemLoader
  7. 数据结构( Pyhon 语言描述 ) — — 第4章:数据和链表结构
  8. 03002_Http请求协议分析
  9. MVC4 上传图片并生成缩略图
  10. SpringMVC(8) - 处理器映射