創建Servlet時適用於App Engine服務的適當範圍:static,instance或local?和每個有什麼含義?看起來您應該儘可能在範圍內使用它們,以避免重新創建(或重新獲取)它們的開銷,但是我想知道這是否會導致數據的不正確重用,特別是如果<threadsafe>true</threadsafe>
。適用於App Engine服務的範圍
下面提供了每個範圍的示例。 MemcacheService
將在以下示例中使用,但我的問題適用於任何和所有服務(儘管我不確定答案取決於所使用的服務)。我通常使用MemcacheService
,DatastoreService
,PersistenceManager
,ChannelService
和UserService
。
靜態範圍:
public class MyServlet extends HttpServlet {
private static MemcacheService memcacheService = MemcacheServiceFactory.getMemcacheService();
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) {
memcacheService.get("x");
}
}
實例成員:
public class MyServlet extends HttpServlet {
private MemcacheService memcacheService = MemcacheServiceFactory.getMemcacheService();
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) {
memcacheService.get("x");
}
}
本地範圍:
public class MyServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) {
MemcacheService memcacheService = MemcacheServiceFactory.getMemcacheService();
memcacheService.get("x");
}
}
完整,簡潔的答案,有源代碼備份。謝謝。 –
沒錯,但讓他們的領域能夠在單元測試中嘲笑他們仍然是有道理的。 –