2015-06-09 4 views
1

У меня много интерфейсов. Каждый из них определяет набор действий модуля. Мне нужно использовать эти интерфейсы как удаленные RMI-интерфейсы, но я не хочу указывать это в определении исходного интерфейса.Java - реализация динамического интерфейса

Я мог бы вручную (для каждого интерфейса действия) создать новый интерфейс, который расширяет как «java.rmi.Remote», так и мой интерфейс действия. Есть ли способ сделать это динамически?

Я не знаю Если я объясню, что я прав. Не стесняйтесь задавать любые вопросы.

ответ

1

Один из способов сделать это - использовать функцию RMI для Spring. Это позволит вам разоблачить интерфейсы java, которые не спускаются с java.rmi.Remote через то, что они называют RMI invokers.

Все документы здесь:

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/remoting.html#remoting-rmi-server

Вы просто зарегистрировать реализации интерфейса весной и использовать org.springframework.remoting.rmi.RmiServiceExporter выставить свою реализацию интерфейса через RMI.

<bean id="accountService" class="example.AccountServiceImpl"> 
     <!-- any additional properties, maybe a DAO? --> 
</bean> 

<bean class="org.springframework.remoting.rmi.RmiServiceExporter"> 
    <!-- does not necessarily have to be the same name as the bean to be exported --> 
    <property name="serviceName" value="AccountService"/> 
    <property name="service" ref="accountService"/> 
    <property name="serviceInterface" value="example.AccountService"/> 
    <!-- defaults to 1099 --> 
    <property name="registryPort" value="1199"/> 
</bean> 

Полностью не навязчивый, но вы должны выпить пружинную пружину. Разве это так плохо?

Для действительно динамического решения вы можете использовать java или groovy для создания вашего контекста приложения в коде. Вы можете перебирать интерфейсы, а затем создавать соответствующие экземпляры RmiServiceExporter в коде.

Либо один из этих способов справиться с этим:

http://static.springframework.org/spring-javaconfig/docs/1.0.0.M4/reference/html/

http://grails.org/Spring%2BBean%2BBuilder

+0

Спасибо за ваш ответ. Но я искал решение, используя чисто Java8. или, возможно, некоторые Apache lib – Netto

+1

Gotcha. Я не думаю, что вы найдете что-нибудь из коробки, которое это делает. Вы завершите воссоздание чего-то вроде весеннего решения. Вы можете посмотреть исходный код :) –

Смежные вопросы