Когда служба RPC вызывается из клиента, "серверная сторона", просматривая вызываемый URL и отображение сервлетов, найдет класс, создаст экземпляр и будет обслуживать запрос.То есть, если у вас есть аннотация @Autowired
, или у вас уже есть экземпляр класса RPC в контексте Spring, это не имеет значения.Новый экземпляр будет создан, и он не будет «знать» о Spring.
Я решаю эту проблему, реализуя класс, расширяющий RemoteServiceServlet
и реализующий Controller
(из Spring MVC) и ServletContextAware
.Таким образом, вы можете отобразить каждую службу RPC по URL-адресу, используя подход Spring MVC, например:
<bean id="publicUrlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/myFirstRpc">firstRpcServiceBeanRef</prop>
<prop key="/mySecondRpc">secondRpcServiceRef</prop>
</props>
</property>
</bean>
Вы также избегаете объявлений для каждого отдельного сервлета RPC в web.xml
, отображения чистые, и у вас естьВесенний впрыск.Вы объявляете только одно отображение в web.xml
для org.springframework.web.servlet.DispatcherServlet
, которое будет обслуживать все вызовы RPC.
В Интернете есть несколько примеров с объяснением GWT RPC и Spring MVC-контроллераинтеграция.
Надеюсь, это поможет.