通过动态代理模式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. [LOJ6469]Magic

    [LOJ6469]Magic 题目大意: 有\(n(n\le10^5)\)个物品,每个物品有一个权值\(w_i(w_i\le10^{18})\).求所有\(n\choose 2\)对物品\((i,j) ...

  2. [NOIp2018提高组]赛道修建

    [NOIp2018提高组]赛道修建 题目大意: 给你一棵\(n(n\le5\times10^4)\)个结点的树,从中找出\(m\)个没有公共边的路径,使得第\(m\)长的路径最长.问第\(m\)长的路 ...

  3. Vue子页面给父页面传递数据

    子页面: <template> <div> <p>子组件</p> <button @click="sendMsg">传递 ...

  4. IIS 日志分析工具:Log Parser Studio

    1.安装Log Parser,下载地址:http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=24659 ...

  5. egret获取本周,上周,今天,昨天,明天,现在时间,今年,本月

    class TimerShow extends egret.DisplayObjectContainer{ private now = new Date(); //当前日期 private nowDa ...

  6. 从MongoDB里面取得json格式的数据,然后存为本地的json文件,然后再从json读取变为dict

    帮宣传下彩印网(www.caiyin.com) 有印刷,广告等等方面的需求就找这个网站吧,没错的. 天气预报在MongoDB中的天气预报的存储方式是: /* 1 */ { "_id" ...

  7. GMA Round 1 奇怪的数列

    传送门 奇怪的数列 已知数列{$a_n$},$a_1=1$,$a_{n+1}=a_n+\frac{1}{a_n}$,现在需要你估计$a_{233333}$的值,求出它的整数部分即可. 将原等式两边平方 ...

  8. 如何给webbrowser指定IE版本

    void Button1Click(object sender, EventArgs e)     {         RegistryKey rk = Registry.LocalMachine; ...

  9. 咏南中间件支持JWT TOKEN

    咏南中间件支持JWT TOKEN

  10. nginx配置http访问自动跳转到https

    1.按照如下格式修改nginx.conf 配置文件,80端口会自动转给443端口,这样就强制使用SSL证书加密了.访问http的时候会自动跳转到https上面 server { listen ; se ...