【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的各种成分映射成 ...
随机推荐
- ECUST Div2 训练赛3 (只有代码)
题解见:http://ecustacm.cn/contest/11/announcements A #include<bits/stdc++.h> #define rep(i,a,b) f ...
- tomcat:利用tomcat部署war包格式的项目
配置jdk环境变量, 配置TOMCAT_HOME 变量, 将war包放入webapps中. 运行tomcar-bin文件夹中的startup.bat. tomcat会自动解压war包. 进入项目:
- HPU组队赛J:Ball King(线段树)
时间限制 1 Second 内存限制 512 Mb 题目描述 HPU601球王争霸赛即将举行,ACMER纷纷参加. 现在有n个人报名参赛,每个人都有一个实力值 ai,实力值较大者获胜. 为保证比赛公 ...
- linux lamp编译环境安装
apache 安装:http://blog.csdn.net/wplblog/article/details/52172128 编译安装 mysql安装:http://www.centoscn.com ...
- Django模型层之多表操作
----------------https://www.cnblogs.com/liuqingzheng/articles/9499252.html 实例:我们来假定下面这些概念,字段和关系 一 创建 ...
- 03 事务,连接池DBCP,C3P0,DBUtils
事务 Transaction 其实指的一组操作,里面包含许多个单一的逻辑.只要有一个逻辑没有执行成功,那么都算失败. 所有的数据都回归到最初的状态(回滚) 事务的作用:为了确保逻辑的成功. 例子: ...
- 【shell编程】之基础知识-输入/输出和重定向
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令通常将其输出写入到标准输出,默 ...
- zabbix监控第一台主机系统
注意zabbix客户端和zabbix服务端版本要一致,否则很容易出问题 实验环境,在第一台centos7(ip为192.168.245.128,以下简称主机1)上安装zabbix服务器端,在第二台ce ...
- linux系统常用监控系统状态信息命令
[root@bogon ~]# uptime #平均负载 23:33:21 up 2:09, 3 users, load average: 0.02, 0.05, 0.05 [root@bogon ~ ...
- linux常见系统调用函数列表
以下是Linux系统调用的一个列表,包含了大部分常用系统调用和由系统调用派生出的的函数.这可能是你在互联网上所能看到的唯一一篇中文注释的Linux系统调用列表,即使是简单的字母序英文列表,能做到这么完 ...