• 面向切面编程(AOP)


    使用Castle实现AOP

    需要在vs上安装Castle.core

    C#:

    1. using Castle.DynamicProxy;
    2. namespace MySport
    3. {
    4. //运动类接口
    5. internal interface Sports
    6. {
    7. public void Run();
    8. public void Dump();
    9. }
    10. //运动
    11. public class Sport : Sports
    12. {
    13. public virtual void Run()
    14. {
    15. Console.WriteLine("run...");
    16. }
    17. public virtual void Dump()
    18. {
    19. Console.WriteLine("dump...");
    20. }
    21. }
    22. }
    23. namespace AOPcore
    24. {
    25. //运动前、后需要做的事情
    26. public class AOPBase : IInterceptor
    27. {
    28. public void Intercept(IInvocation In)
    29. {
    30. WarmUp(In);
    31. In.Proceed();
    32. Stretch(In);
    33. }
    34. //运动前热身
    35. public void WarmUp(IInvocation In)
    36. {
    37. Console.WriteLine("before {0} warm up...", In.Method.Name);
    38. }
    39. //运动后拉伸
    40. public void Stretch(IInvocation In)
    41. {
    42. Console.WriteLine("after {0} stretch...", In.Method.Name);
    43. }
    44. }
    45. }
    1. using AOPcore;
    2. using MySport;
    3. using Castle.DynamicProxy;
    4. namespace program
    5. {
    6. public class Program
    7. {
    8. public static void Main()
    9. {
    10. ProxyGenerator proxyGenerator = new ProxyGenerator();
    11. AOPBase aopbase = new AOPBase();
    12. Sports sports = proxyGenerator.CreateClassProxyWithTarget(new Sport(),aopbase);
    13. //Sports sports = proxyGenerator.CreateClassProxy(aopbase);
    14. sports.Dump();
    15. sports.Run();
    16. }
    17. }
    18. }

    不使用AOP的情况下需要修改sport类增加运动前后的扩展运动,使用了AOP之后我们不需要修改sport类,分离了扩展运动和核心运动的逻辑。让代码结构更加合理和优秀。

  • 相关阅读:
    AntV的g6库纵向的紧凑树形节点之间箭头被覆盖
    Coredump
    Android反编译apk
    redis-cluster搭建及拓扑刷新java测试
    Android push到/system/app下,导致找不到so包
    数组中的第K个最大元素 -- 堆&快排
    Spring通知类型及使用ProxyFactoryBean创建AOP代理
    java全内容收集
    期望E与高斯分布的期望
    JS 逆向之 Hook
  • 原文地址:https://blog.csdn.net/qq_37003193/article/details/126252639