深入浅出AOP(一)

动态代理实现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
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值