【RMI】使用Java反射机制实现RMI
主要包括如下类
RMIBeansManager.java
RMIDemo.java
RMIService.java
RMIVO.java
SayHello.java
RMIVO.java
package com.sssppp.RMI;
public class RMIVO {
private String beanName; //对应的bean
private String method; //方法名
private String params; //方法参数
public String getBeanName() {
return beanName;
}
public void setBeanName(String beanName) {
this.beanName = beanName;
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
public String getParams() {
return params;
}
public void setParams(String params) {
this.params = params;
}
}
RMIService.java
package com.sssppp.RMI;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import com.sssppp.Json.jackson.Utils.JsonUtil;
public class RMIService {
public String call(RMIVO rmi) {
Object bean = RMIBeansManager.getBean(rmi.getBeanName());
Method method = findMethod(bean, rmi.getMethod());
String retValue = null;
if (method == null) {
System.out.println("Can not get method: " + rmi.getMethod());
} else {
try {
Object obj;
if (rmi.getParams() == null) {
obj = method.invoke(bean);
} else {
obj = method.invoke(bean, rmi.getParams());
}
retValue = convertToJson(obj);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
return retValue;
}
private Method findMethod(Object bean, String methodName) {
for (Method method : bean.getClass().getMethods()) {
if (method.getName().equals(methodName)) {
return method;
}
}
return null;
}
private String convertToJson(Object obj) {
try {
return JsonUtil.parseObjectToJsonString(obj);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
RMIBeansManager.java
用于获取bean
package com.sssppp.RMI;
import javax.ws.rs.POST;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;
@Component
public class RMIBeansManager {
private static ApplicationContext context = null;
@POST
private static void init() {
try {
context = new ClassPathXmlApplicationContext(
"/conf/spring-conf/rmiBean.xml");
} catch (Exception e) {
}
}
public static Object getBean(String beanName) {
Object retObject = null;
retObject = getContext().getBean(beanName);
return retObject;
}
public static ApplicationContext getContext() {
if (context == null) {
init();
}
return context;
}
}
对应的rmiBean.xml的内容如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">
<context:component-scan base-package="com.sssppp.RMI" />
</beans>
SayHello.java
package com.sssppp.RMI;
import org.springframework.stereotype.Component;
@Component("sayHello")
public class SayHello {
public void welcome(String name) {
System.out.println("Welcome , hello " + name);
}
}
RMIDemo.java
package com.sssppp.RMI;
public class RMIDemo {
public static void main(String[] args) {
RMIVO rmivo = new RMIVO();
rmivo.setBeanName("sayHello");
rmivo.setMethod("welcome");
rmivo.setParams("Tom");
RMIService rmiService = new RMIService();
rmiService.call(rmivo);
}
}
调试结果
Welcome , hello Tom
【RMI】使用Java反射机制实现RMI的更多相关文章
- Java反射机制浅析
概念 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语 ...
- Java反射机制详解(1) -反射定义
首先,我们在开始前提出一个问题: 1.在运行时,对于一个java类,能否知道属性和方法:能否去调用它的任意方法? 答案是肯定的. 本节所有目录如下: 什么是JAVA的反射机制 JDK中提供的Refle ...
- Java反射机制Reflection
Java反射机制 1 .class文件 2 Class类 3 Class类与反射机制 4 Java反射机制的类库支持及简介 5 反射机制的定义与应用 6 反射机制Demo Java反射机制demo(一 ...
- 第28章 java反射机制
java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...
- Java反射机制
Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射: 静态编译:在编译时确定类型,绑定对象,即通过 ...
- java基础知识(十一)java反射机制(上)
java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...
- java基础知识(十一)java反射机制(下)
1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...
- Java反射机制专题
·Java Reflection Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方 ...
- java反射机制深入详解
java反射机制深入详解 转自:http://www.cnblogs.com/hxsyl/archive/2013/03/23/2977593.html 一.概念 反射就是把Java的各种成分映射成 ...
随机推荐
- 怎样用CMD命令强行删除文件?
如果你要删除的整个文件夹以及文件夹里面的所有内容的话rd/s/q 盘符:\某个文件夹 (这样整个文件夹所有的文件和文件夹都删除了)比如我想删除D盘的123文件夹以及123文件夹里面所有的内容rd/ ...
- flask中的模型
1.什么是模型 模型,是根据数据库中表的结构而创建出来的class.每一张表对应到编程语言中,就是一个class表中的每一个列对应到编程语言中就class中的一个属性. 2.ORM的三大特征 1.数据 ...
- XXS level3
(1)用level1和2的方法都行不通,查看PHP源代码,发现url与输入框内容都进行了过滤 <?php ini_set("display_errors", 0); $str ...
- CentOS下安装VirtualBox
VirtualBox在Ubtubu下的使用和Window下一样简单,下载安装包,安装运行即可.但在CentOS下需要折腾一下 ======1 下载相应的repo包:官网找到Centos7相应的repo ...
- LG4071 [SDOI2016]排列计数
题意 题目描述 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m 个数是稳定的 ...
- mysql之主从配置实现
我使用的是两台centos7虚拟机来做实验的,主服务器ip为192.168.2.128,从服务器ip为192.168.2.130 安装mysql就不用说了吧,不对,我们需要安装的是mariadb,命令 ...
- Introducing Makisu: Uber’s Fast, Reliable Docker Image Builder for Apache Mesos and Kubernetes
转自:https://eng.uber.com/makisu/?amp To ensure the stable, scalable growth of our diverse tech stack, ...
- centos7 用yum安装java8
1.查看yum源中是否有相关套件yum -y list java* 2.上图中可以看到有两个自己想用的套件,经过试验发现用yum install java-1.8.0-openjdk 时最后 /usr ...
- oracle参数文件与启动过程
oracle随系统启动而启动 cs65-64桌面版orcle-11.2.0.4 启动监听器,后台进程,OEM. 注意: 如果只做一和三,只能启动后台进程,监听器不启动,如果只做二和三,只能启动监听器, ...
- 事务 — Redis 设计与实现
非事务状态下的命令以单个命令为单位执行,前一个命令和后一个命令的客户端不一定是同一个: 事务状态则是以一个事务为单位,执行事务队列中的所有命令:除非当前事务执行完毕,否则服务器不会中断事务,也不会执行 ...