zoukankan      html  css  js  c++  java
  • Spirng.net 替换任意方法

    1.首先上客户端代码

     static void Main(string[] args)
            {
                IApplicationContext ctx = ContextRegistry.GetContext();
                Console.WriteLine("替换方法");
                UserDao dao = (UserDao)ctx.GetObject("userDao");
                Console.WriteLine(dao.GetValue("Liu Dong"));
                Console.WriteLine();
    }

    这里说明下当你执行GetValue这个方法的时候由配置文件将其另外一个方法

    代码如下:

    public class UserDao
        {
            //虚方法
            public virtual string GetValue(string input)
            {
                return null;
            }
        }

        //实现IMethodReplacer接口
        public class ReplaceValue : IMethodReplacer
        {
            public object Implement(object target, MethodInfo method, object[] arguments)
            {
                string value = (string)arguments[0];
                return "获取到:" + value;
            }
        }

    //注意就像上面说到的当执行GetvALUE方法的时候,会被替换为实现了IMethodReplacer这个接口的Implement方法,里面拥有被替换前其方法的几个参数

    object[] arguments 之前未被替换前的方法的参数数组 ,MehthodInfo 方法的名称,哪个对象的方法被替换 这里假设就是x对象 而x=target

    最后上配置文件 (最后上配置文件的原因就为了让我们在此之前先明白此次博客的意图在于替换方法,并且是如何替换的)

          <!--替换方法-->
          <object id="userDao" type="SpringNet_MethodDi.UserDao, SpringNet_MethodDi">
     <replaced-method name="GetValue" replacer="replaceValue"> <!--userDao这个对象执行Getvalue这个方法的时候,调用信息传递给 replacevalue这个对象并在-->               <!--Implement方法里执行方法的替换 -->
              <arg-type match="String"/>
            </replaced-method>
          </object>
          <object id="replaceValue" type="SpringNet_MethodDi.ReplaceValue, SpringNet_MethodDi"/>   <!--replaceValue类必须实现IMethodReplacer接口 -->

  • 相关阅读:
    开源监控软件之争
    为什么很多公司都自主开发监控系统?
    为 UWP 应用提供的 .NET 网络 API
    亲,根据二八定律,你的监控工具可能白装了哦
    PHP7正式版测试,性能惊艳!
    Java Web 前端高性能优化(一)
    天下武功无坚不破,唯快不破!
    告警信息大爆炸,运维解放秘籍!
    第33节:Java面向对象中的异常
    第33节:Java面向对象中的异常
  • 原文地址:https://www.cnblogs.com/kexb/p/4574043.html
Copyright © 2011-2022 走看看