主要包括如下类

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的更多相关文章

  1. Java反射机制浅析

    概念 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语 ...

  2. Java反射机制详解(1) -反射定义

    首先,我们在开始前提出一个问题: 1.在运行时,对于一个java类,能否知道属性和方法:能否去调用它的任意方法? 答案是肯定的. 本节所有目录如下: 什么是JAVA的反射机制 JDK中提供的Refle ...

  3. Java反射机制Reflection

    Java反射机制 1 .class文件 2 Class类 3 Class类与反射机制 4 Java反射机制的类库支持及简介 5 反射机制的定义与应用 6 反射机制Demo Java反射机制demo(一 ...

  4. 第28章 java反射机制

    java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...

  5. Java反射机制

    Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射:     静态编译:在编译时确定类型,绑定对象,即通过 ...

  6. java基础知识(十一)java反射机制(上)

    java.lang.Class类详解 java Class类详解 一.class类 Class类是java语言定义的特定类的实现,在java中每个类都有一个相应的Class对象,以便java程序运行时 ...

  7. java基础知识(十一)java反射机制(下)

    1.什么是反射机制? java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象都能够调用他的属性和方法,这种动态获取属性和方法的功能称为java的反射机制. ...

  8. Java反射机制专题

    ·Java Reflection Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方 ...

  9. java反射机制深入详解

    java反射机制深入详解  转自:http://www.cnblogs.com/hxsyl/archive/2013/03/23/2977593.html 一.概念 反射就是把Java的各种成分映射成 ...

随机推荐

  1. 将mysql的表导出为excel

     1.在表上右键,选择Table Data Export Wizard,选择想要导出的字段,点击next 2.选择导出文件的路径->csv格式->next 3.点击next 4.打开刚才导 ...

  2. 软件安装配置笔记(一)——Oracle及PLSQL Developer的安装与配置

    一.Oracle: Oracle服务器端或桌面端可以创建本地的Oracle数据库,而Oracle客户端是用来远程连接其他服务器或电脑上的Oracle服务器端或桌面端的,安装客户端软件只需配置网络连接文 ...

  3. python性能分析——insert()

    我们在list中插入数据时,经常使用这两个函数: append():在列表的末尾增加一个数据 insert():在某个特定位置前加一个数据 Python内的list实现是通过数组实现的,而不是链表的形 ...

  4. 《DSP using MATLAB》Problem 5.14

    说明:这两个小题的数学证明过程都不会,欢迎博友赐教. 直接上代码: %% +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  5. hdu1540 Tunnel Warfare 线段树/树状数组

    During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast a ...

  6. 创建新用户,及用新用户名和密码登录--------------DCL

    创建用户基本语法:    creat user 用户名@"ip地址" identified by "密码" 登录数据库以后:用show databases; 显 ...

  7. 【HAOI2014】走出金字塔

    神奇…… 原题: 在探险的过程中,考古学家Dr. Kong 无意地被困在一个金字塔中.金字塔中的每个房间都是三角形.Dr. Kong可以破壁走到相邻的房间去. 例如,如果他目前处于三角形(2,2)房间 ...

  8. nginx安装最简单教程

    [root@bogon ~]# wget -c http://nginx.org/download/nginx-1.7.9.tar.gz #下载安装包 [root@bogon ~]# ls anaco ...

  9. 10 BPMN PDF books, articles and brochures

    转自:https://www.heflo.com/blog/bpm/bpmn-pdf/ If you are looking for more information about BPMN (Busi ...

  10. Dynamic Signals and Slots

    Ref https://doc.qt.io/archives/qq/qq16-dynamicqobject.html Trolltech | Documentation | Qt Quarterly ...