创建 servlet 时 App Engine 服务的正确范围是什么:静态、实例或本地?每个的含义是什么?似乎您应该希望在尽可能广泛的范围内使用它们,以避免重新创建(或重新检索)它们的开销,但我想知道这是否会导致数据的不当重用,尤其是如果<threadsafe>true</threadsafe>
.
下面提供了每个范围的示例。 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");
}
}