动态代理实现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是这样的:
未完待续。。。。。