java 动态实现接口
2024-08-29 11:06:52
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); } }
最新文章
- Rust的力量
- 【重要更新】Senparc.Weixin SDK v4.3.3升级说明
- 【转】【MySQL】mysql 通过bin-log恢复数据方法详解
- Android开发中Bundle用法包裹数据(转)
- google calendar api v3
- web安全培训笔记
- 数据库 —— mySQL 的安装
- AngularJS 基础用法
- 关于NOIP2014“无线网络发射器选址”一题的衍生题目的思考及思维方向
- 201621123050 《Java程序设计》第5周学习总结
- Shell中map的使用
- 编译安装lamp环境
- Codeforces Round #319 (Div. 2) E - Points on Plane
- 经典sql-获取当前文章的上一篇和下一篇
- assert_param
- Xcode 10 如何创建自定义 Snippet
- java虚拟机类加载
- C#多线程数据分布加载
- Android之获取内外部存储器的容量
- List多个字段标识过滤
热门文章
- mysql安装配置、主从复制配置详解【转】
- 一些汇编中的 trick
- C#设计模式视频教程(不知道讲的好不好,刚刚看到)
- Docker(二):Docker的用途
- ef core 2.1 利用Query Type查询视图
- Axisfault faultcode:Server.userException异常
- 维生素C - 坏血症
- MariaDB+Galera+Haproxy+Keepalived搭建集群
- java之properties和yml两种配置文件比较(非原创)
- php从数据库选取记录形成列表(首页调用)