深入浅出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