Java Rmi
1.接口必须继承java.rmi.Remote接口
2.方法必须抛出java.rmi.RemoteException异常
Spring Rmi
1.可以不实现java.rmi.Remote接口
2.方法可以不抛出异常
问题:在Spring 内部是怎么实现的?
在Spring中 是通过org.springframework.remoting.rmi.RmiServiceExporte 在服务端导出一个服务
RmiServiceExporter定义
public class RmiServiceExporter extends RmiBasedExporter implements InitializingBean, DisposableBean {
}
实现了 InitializingBean接口 Spring会在bean的实例化阶段 调用 InitializingBean 的afterPropertiesSet 方法
bean的实例化 会在什么时候触发 取决于配置 例如lazy-init
RmiServiceExporter afterPropertiesSet 方法实现
public void afterPropertiesSet() throws RemoteException {
prepare();
}
prepare方法
public void prepare() throws RemoteException {
//检查配置中的 service对象 如果为null 抛出异常
checkService();
//检查服务名称
if (this.serviceName ==

本文介绍了Spring RMI服务导出的原理,不同于Java RMI,Spring允许服务不实现`java.rmi.Remote`接口且方法不抛`RemoteException`。在Spring中,`RmiServiceExporter`在bean初始化后导出服务,通过`InitializingBean`接口驱动,并使用`RmiInvocationWrapper`包装未实现`Remote`接口的服务,以确保兼容JDK RMI的客户端调用。
最低0.47元/天 解锁文章
875

被折叠的 条评论
为什么被折叠?



