1.org.springframework.remoting.rmi.RmiProxyFactoryBean
其使用的是rmi协议实现
实现过程,首先是服务端
定义一个导出类
1
2
3
|
public
interface
AccountService {
String getUsername();
}
|
1
2
3
4
5
6
|
public
class
AccountServiceImpl
implements
AccountService{
@Override
public
String getUsername() {
return
"RMI Test!"
;
}
}
|
rmi.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?
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
>
|
启动服务
1
2
3
4
5
6
7
8
9
|
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);
}
}
|
接下来客户端如下
1
2
3
|
public
interface
AccountService {
String getUsername();
}
|
rmi.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<?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>
|
启动程序
1
2
3
4
5
6
7
8
9
|
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