• 深入浅出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是这种:




    未完待续。

    。。。




  • 相关阅读:
    The model backing the 'XXX' context has changed 错误
    MVC5+EF6 入门完整教程四
    MVC5 + EF6 完整入门教程三
    MVC5 + EF6 入门完整教程二
    每日总结9.11
    setTextColor的几个注意事项
    selector使用注意事项
    每日总结9.9
    android popWindow使用注意事项
    有关TextView的drawaleTop属性
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5247705.html
Copyright © 2020-2023  润新知