通过动态代理模式Interceptor实现在RegUser()方法本身业务前后加上一些自己的功能,如:PreProceed和PostProceed,即不修改UserProcessor类又能增加新功能

  1. 定义1个用户接口,里面有个注册用户方法

    public interface IUserProcessor
    {
      void RegUser(User user);
    }
  2. 实现用户这个接口
    public class UserProcessor : IUserProcessor
    {
    /// <summary>
    /// 必须带上virtual 否则无效
    /// </summary>
    /// <param name="user"></param>
    public virtual void RegUser(User user)
    {
    Console.WriteLine($"用户已注册。Name:{user.Name},PassWord:{user.Password}");
    }
    }
  3. 继承IInterceptor接口,实现IInterceptor接口里的Intercept方法
    public class MyInterceptor : IInterceptor
    {
    public void Intercept(IInvocation invocation)
    {
    PreProceed(invocation);
    invocation.Proceed();//就是调用原始业务方法
    PostProceed(invocation);
    } public void PreProceed(IInvocation invocation)
    {
    Console.WriteLine("方法执行前");
    } public void PostProceed(IInvocation invocation)
    {
    Console.WriteLine("方法执行后");
    }
    }
  4. 调用

    /// <summary>
    /// 使用Castle\DynamicProxy 实现动态代理
    /// 方法必须是虚方法
    /// </summary>
    public class CastleProxyAOP
    {
    public static void Show()
    {
    User user = new User()
    {
    Name = "Eleven",
    Password = ""
    };
    ProxyGenerator generator = new ProxyGenerator();
    MyInterceptor interceptor = new MyInterceptor();
    UserProcessor userprocessor = generator.CreateClassProxy<UserProcessor>(interceptor);
    userprocessor.RegUser(user);
    }
    }

5.动态代理AOP实现-DynamicProxy模式的更多相关文章

  1. 浅析DispatchProxy动态代理AOP

    浅析DispatchProxy动态代理AOP(代码源码) 最近学习了一段时间Java,了解到Java实现动态代理AOP主要分为两种方式JDK.CGLIB,我之前使用NET实现AOP切面编程,会用Fil ...

  2. 动态代理AOP实现方法过滤

    上一节实现了动态代理,接下来 有时候,我不需要在每一个方法都要记录日志,做权限验证 等等. 所有就有了这样的需求.AOP实现特定方法过滤,有选择性的来对方法实现AOP 拦截.就是本节标题所示. 举个例 ...

  3. .NET:动态代理的 “5 + 1” 模式

    背景 什么叫“动态代理”,代理模式我们都知道,动态代理就是动态生成的代理(采用Emit). 重量级的ORM和IOC产品离不开动态代理,作为开发人员,多数情况不用关注动态代理的内部实现机制,但是了解其一 ...

  4. spring中使用动态代理(AOP)

    spring是整合了BGLIB和JDK两种动态代理 示例:使用CGLIB代理 public class MyCar { private String color = "blue"; ...

  5. 动态代理 aop切面实现事务管理

    1.定义接口和实现 public interface UserService { public String getName(int id); public Integer getAge(int id ...

  6. Spring-Boot的动态代理AOP原理

    前言 Spring AOP使用了动态代理技术,动态代理在业界比较流行的实现方式有,CGLIB,Javassist,ASM等等. Spring动态代理实现方式 Spring采用了JDK和CGLIB两种方 ...

  7. C# Aspect-Oriented Programming(AOP) 利用多种模式实现动态代理

    什么是AOP(Aspect-Oriented Programming)? AOP允许开发者动态地修改静态的OO模型,构造出一个能够不断增长以满足新增需求的系统,就象现实世界中的对象会在其生命周期中不断 ...

  8. AOP从静态代理到动态代理 Emit实现

    [前言] AOP为Aspect Oriented Programming的缩写,意思是面向切面编程的技术. 何为切面? 一个和业务没有任何耦合相关的代码段,诸如:调用日志,发送邮件,甚至路由分发.一切 ...

  9. java反射实现动态代理

    参考:http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html http://my.oschina.net/lyp3314/b ...

随机推荐

  1. [CF49E]Common ancestor

    [CF49E]Common ancestor 题目大意: 有两个由小写字母构成的字符串\(S\)和\(T(|S|,|T|\le50)\).另有\(n(n\le50)\)个形如\(a\to bc\)的信 ...

  2. Egret引擎的常用倒计时

    直接上代码, private timeControl() { let timer: egret.Timer = segret.Timer(); timer.addEventListener(egret ...

  3. 资源从3ds max导入UE4问题

    1.先删掉灯光和相机.材质命名为英文,贴图也要英文取名,不能有中文,并且必须是JPG格式.并整理好组:删掉多余的物体,例如线2.坐标归零.并把材质转换为默认材质3.选中一个组,先unground,然后 ...

  4. mysql 命令语句

    1.大部分数据库命令语句 数据库的命令 net start MYsql 启动的服务 net stop mysql 关闭服务 mysql -uroot -p 输入数据库名和密码登入 show datab ...

  5. python version 3.6 required,which was not fount in the registry(python3.6安装scrapy)

    在安装scrapy时遇到问题 环境:win10(64位), Python3.6(64位) 安装scrapy: 1.安装wheel(安装后,便支持通过wheel文件安装软件) pip3 install ...

  6. VBA 判断一个TXT编码方式,再创建一个新的文件,复制数据进去

    如题,先读取一个文本文件判断编码(Unicode  ANSI),就这两种编码然后将txt导入到excel表中,最后处理完成,再创建一个相同编码,不同文件名的txt文件,把新数据放进去 Sub test ...

  7. [PHP] 多表外连接性能测试及优化

    原文:https://blog.csdn.net/tang_huan_11/article/details/41925639 版权声明:本文为博主原创文章,转载请附上博文链接!

  8. 【Zuul】Zuul过滤器参考资料

    #https://blog.csdn.net/chenqipc/article/details/53322830#https://github.com/spring-cloud/spring-clou ...

  9. MyBatis(五):mybatis关联映射

    Mybatis中表与表之间的关系分为一下4类: 1)一对一 2)一对多 3)多对一 4)多对多 创建数据Demo表 数据库表: 用户表user:记录了购买商品的用户信息. 订单表orders:记录了用 ...

  10. Execution failed for task ':compileDebugAidl'.

    昨天终于升级了下Ubuntu系统到16.04LTS,之前是12.04LTS(导致内网一些同事开发的网址无法打开,以及其他工具软件无法安装). 安装完android开发工具,运行之前的project,出 ...