zoukankan      html  css  js  c++  java
  • 【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
    
  • 相关阅读:
    Linux内核网络协议栈优化总纲
    Java实现 蓝桥杯VIP 算法训练 连续正整数的和
    Java实现 蓝桥杯VIP 算法训练 连续正整数的和
    Java实现 蓝桥杯VIP 算法训练 寂寞的数
    Java实现 蓝桥杯VIP 算法训练 寂寞的数
    Java实现 蓝桥杯VIP 算法训练 学做菜
    Java实现 蓝桥杯VIP 算法训练 学做菜
    Java实现 蓝桥杯VIP 算法训练 判断字符位置
    Java实现 蓝桥杯VIP 算法训练 判断字符位置
    Java实现 蓝桥杯VIP 算法训练 链表数据求和操作
  • 原文地址:https://www.cnblogs.com/ssslinppp/p/6669159.html
Copyright © 2011-2022 走看看