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接口 -->

  • 相关阅读:
    android中的一个圆角图片
    android中一个评分的控件
    C++ primer(第五版)中需要复习第二遍的知识点记录
    在ubuntu18.04上交叉编译opencv2.4.9
    C6748和音频ADC连接时候的TDM以及I2S格式问题
    C6748的启动方式问题
    AK5703的ALC
    cool edit工具介绍及使用
    CCS编译环境及TI仿真器的使用
    把YUV转化成opencv中的Mat格式的两行代码备份
  • 原文地址:https://www.cnblogs.com/kexb/p/4574043.html
Copyright © 2011-2022 走看看