RealProxy实现AOP编程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RealProxy实现AOP编程相关的知识,希望对你有一定的参考价值。

稍微变化一下!注意区别。

Program.cs

class Program
{
  static void Main(string[] args)
  {
    User user = new User() { Name = "李四", Password = "12121" };
    var processor = TransparentProxy.Create(new UserProcessor());
    processor.Shopping(user);
    Console.ReadLine();
  }
}

User.cs

public class User
{
  public string Name { get; set; }

  public string Password { get; set; }
}

IUserProcessor.cs

public interface IUserProcessor
{
  void Shopping(User user);
}

UserProcessor.cs

public class UserProcessor : IUserProcessor
{
  public void Shopping(User user)
  {
    Console.WriteLine("买呀,买呀,买桃子!");
  }
}

UserProxyProcessor.cs

class UserProxyProcessor<T> : RealProxy
{
  private T processor;

  public UserProxyProcessor(T processor) : 
    base(typeof(T))//不能丢
  {
    this.processor = processor;
  }

  public override IMessage Invoke(IMessage msg)
  {
    PreShopping();
    IMethodCallMessage message = (IMethodCallMessage)msg;
    object result = message.MethodBase.Invoke(processor, message.Args);
    PostShopping();
    return new ReturnMessage(result, new object[0], 0, null, message);
  }

  private void PreShopping()
  {
    Console.ForegroundColor = ConsoleColor.Red;
    Console.WriteLine("买东西前,判断是否注册了!");
    Console.ResetColor();
  }

  private void PostShopping()
  {
    Console.ForegroundColor = ConsoleColor.Red;
    Console.WriteLine("买完东西后,写个日志文件!");
    Console.ResetColor();
  }
}

TransparentProxy.cs

public static class TransparentProxy
{
  public static IUserProcessor Create(IUserProcessor obj)
  {
    var processor = new UserProxyProcessor<IUserProcessor>(obj);
    IUserProcessor transparentProxy = (IUserProcessor)processor.GetTransparentProxy();
    return transparentProxy;
  }
}

 

以上是关于RealProxy实现AOP编程的主要内容,如果未能解决你的问题,请参考以下文章

.Net 框架实现AOP(动态代理实现AOP,本文为翻译)

JAVA之AOP

Spring 3.0 AOP AOP 术语

远程代理Remoting/RealProxy

AOP 横行切面编程和 纵向编程 介绍

JavaEE手写AOP实现,自动代理, AOP 面向切面的编程思想