spring rmi代理性能

   在看spring为rmi提供的export机制时看到 RmiBasedExporter 这个类,当我们在开发rmi调用服务接口并不需要实现Remote接口,Spring在启动的时候会为服务接口对象自动生成代理对象(RmiInvocationWrapper),这个代理类本身实现了Remote接口。通过查看代理对象的源代码发现,在代理对象中是通过反射机制来调用业务service的,我们知道反射机制比非反射机制的调用的效率慢不少。所以我想是不是能让业务业务服务接口继承Remote接口,这样spring在启动服务的时候就不需要为服务对象生成rmi的代理了。说不定这样效率会提高不少哦!

   不过这样的改造之后,需要接口方法显示地抛出RemotingException,这样对客户端来说稍微有些麻烦。

public abstract class RmiBasedExporter extends RemoteInvocationBasedExporter { protected Remote getObjectToExport() { // determine remote object if (getService() instanceof Remote && ((getServiceInterface() == null) || Remote.class.isAssignableFrom(getServiceInterface()))) { // conventional RMI service return (Remote) getService();} else { // RMI invoker if (logger.isDebugEnabled()) { logger.debug("RMI service [" + getService() + "] is an RMI invoker"); } return new RmiInvocationWrapper(getProxyForService(), this); } } /** * Redefined here to be visible to RmiInvocationWrapper. * Simply delegates to the corresponding superclass method. */ protected Object invoke(RemoteInvocation invocation, Object targetObject) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { return super.invoke(invocation, targetObject); } }

你可能感兴趣的:(spring rmi代理性能)