zoukankan      html  css  js  c++  java
  • java 动态实现接口

    package com.yhouse.modules.daos;
    
    public interface IUserDao {
        public String getUserName();
        public String Say();
    }

    2.

    package com.yhouse.modules.daos;
    
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    public class MethodProxy implements InvocationHandler {
        @Override
        public Object invoke(Object proxy, Method method, Object[] args)  throws Throwable {        
            //如果传进来是一个已实现的具体类(本次演示略过此逻辑)
            if (Object.class.equals(method.getDeclaringClass())) {  
                try {  
                    return method.invoke(this, args);  
                } catch (Throwable t) {  
                    t.printStackTrace();  
                }  
            //如果传进来的是一个接口(核心)
            } else {  
                System.out.println(method.getName());
                return run(method, args);  
            }  
            return null;
        }
        
        /**
         * 实现接口的核心方法 
         * @param method
         * @param args
         * @return
         */
        public Object run(Method method,Object[] args){  
            //TODO         
            //如远程http调用
            //如远程方法调用(rmi)
            //....
        
           return "method call success!";
        }  
    }

    3.

    package com.yhouse.modules.daos;
    
    import java.lang.reflect.Proxy;
    
    public class Test {
    
        public static void main(String[] args) throws ClassNotFoundException {
            // TODO Auto-generated method stub
        
             String className = "com.yhouse.modules.daos.IUserDao";
              String methodName = "Say";
              Class clz = Class.forName(className);
              
            
              // Object newProxyInstance = Proxy.newProxyInstance(IUserDao.class.getClassLoader(),  new Class[]{IUserDao.class},m);
            MethodProxy m=new MethodProxy();
             Object newProxyInstance = Proxy.newProxyInstance(clz.getClassLoader(),  new Class[]{clz},m);
             
             IUserDao ud=((IUserDao)newProxyInstance);
            String s= ud.getUserName();
             System.out.println(s);
             
          String s1=ud.Say();
             System.out.println(s1);
    
        }
    
    }
  • 相关阅读:
    页面输入框限制
    异常处理:Sys.WebForms.PageRequestManagerParserErrorException:The message……
    几种常用网页文本编辑器总结
    C#委托和事件讲解
    ASP.NET内置对象详解
    string和stringBuilder区别
    Session和Cookie深度剖析
    破解版ps
    webpack
    JS设置cookie、读取cookie、删除cookie
  • 原文地址:https://www.cnblogs.com/tiancai/p/8283640.html
Copyright © 2011-2022 走看看