首页 > 其他 > 详细

深入浅出AOP(一)

时间:2015-06-27 22:48:43      阅读:190      评论:0      收藏:0      [点我收藏+]

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


技术分享


未完待续。。。。。




深入浅出AOP(一)

原文:http://blog.csdn.net/qiumuxia0921/article/details/46664117

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!