Rmi在Spring中的使用之RmiServiceExporter

今天面试被问及到一个只是简单听说过,但是没有去用过的东西,用了简短的一会时间去看了下Spring的rmi文档,大致实现方式有其下几种

1.org.springframework.remoting.rmi.RmiProxyFactoryBean

其使用的是rmi协议实现

实现过程,首先是服务端

定义一个导出类

public interface AccountService {
    String getUsername();
}

public class AccountServiceImpl implements AccountService{
    @Override
    public String getUsername() {
        return "RMI Test!";
    }
}

rmi.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="accountService" class="example.AccountServiceImpl">
        <!-- any additional properties, maybe a DAO? -->
    </bean>
    <bean class="org.springframework.remoting.rmi.RmiServiceExporter">
        <!-- 这里的服务名可以随意填写但是必须和rmi://hostname:1199/xxxxxxx的xxxxxxx相同 -->
        <property name="serviceName" value="AccountService"/>
        <!-- 导出实体 -->
        <property name="service" ref="accountService"/>
        <!-- 导出接口,这个为导出接口,注意,客户端包名可以和这里不同,但是为了统一建议做一个coreInterface
            包,以便以后维护方便 -->
        <property name="serviceInterface" value="example.AccountService"/>
        <!-- 端口号,默认为1099,这里注意占用问题 -->
        <property name="registryPort" value="1199"/>
    </bean>
</beans>

启动服务

public class Main {
    public static void main(String[] args) {
        ApplicationContext context =
                new ClassPathXmlApplicationContext("rmi.xml");
        AccountService service = context.getBean("accountService", AccountService.class);
        String userName = service.getUsername();
        System.out.println(userName);
    }
}


接下来客户端如下

public interface AccountService {
    String getUsername();
}

rmi.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="accountService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
        <!-- 接收的rmi协议 -->
        <property name="serviceUrl" value="rmi://localhost:1199/AccountService"/>
        <!-- 接收的rmi协议的接口 -->
        <property name="serviceInterface" value="example.AccountService"/>
    </bean>
</beans>

启动程序

public class Main {
    public static void main(String[] args) {
        ApplicationContext context =
                new ClassPathXmlApplicationContext("rmi.xml");
        AccountService service = context.getBean("accountService", AccountService.class);
        String userName = service.getUsername();
        System.out.println(userName);
    }
}

这样就可以在服务器端得到了RMI Test!

当我们在启动服务端的时候会发现,其控制台一直在运行状态,当结束后,还会有rmi进程在运行。其接口协议为rmi://hostname:1199/xxxxxxx



转载于:https://my.oschina.net/stategrace/blog/338245

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值