事實證明,至少使用Spring的時候,有一個更簡單的做到這一點,這樣你可以使用@Autowired和它不涉及大規模的配置或基類的方法。需要注意的是,您還必須使用AspectJ。這裏有您需要爲您的GWT的servlet:
@Configurable
public class MyGwtServiceImpl extends RemoteServiceServlet implements MyGwtService
{
@Autowired
private MyService service;
// ...
}
而在你的Spring配置確保你也有:
<!-- enable autowiring and configuration of non-spring managed classes, requires AspectJ -->
<context:spring-configured/>
最後一個音符。如果您還在使用GWT應用程序(以及您的GWT servlet)中使用Spring安全性,則需要確保定義了正確的模式以確保AspectJ編織正確完成(即,您同時獲得@Secured註釋處理和@Autowired處理),你將需要:
<!-- turn on spring security for method annotations with @Secured(...) -->
<!-- the aspectj mode is required because we autowire spring services into GWT servlets and this
is also done via aspectj. a server 500 error will occur if this is changed or removed. -->
<security:global-method-security secured-annotations="enabled" mode="aspectj"/>
當你在你的答案,春天的第一部分技術上是正確的,默認情況下,自動連接對待的要求,因此,將驗證它構建了一個註釋字段/方法可以匹配註釋項目的bean。如果沒有,它會炸燬,Web容器將無法啓動。 – icfantv
此外,在答案的第二部分中,我在網絡上看到了這個解決方案,但是需要注意的是1)我需要創建一個父Servlet類來讓所有的GWT servlet類擴展,這是我期望避免的,以及2)這種模式混淆了異常處理,並且在拋出時阻止正確處理它們。在這裏看到作者的評論:http://blog.maxmatveev.com/2011/02/simple-spring-bean-autowiring-in-gwt.html,和他的解決方案 - 這是使用AspectJ。 – icfantv
你*不需要*創建一個基類,每個servlet都可以爲自己覆蓋init():) – milan