Я склонен думать, что синглтоны используются слишком часто и часто указывают на недостатки базовой архитектуры решения. Предполагая, что вы сделали достаточно анализа, чтобы доказать, что вам нужен Singleton, вы можете использовать более старый шаблон Singleton, который не зависит от статической инициализации. Вот пример:
public SomeServlet extends HttpServlet {
private instance = null;
private SomeServlet() {
// Construction code here
}
public synchronized SomeServlet getInstance() {
if(instance == null) {
instance = SomeServlet();
}
return instance;
}
// Servlet methods here
}
Я вижу две потенциальные проблемы:
Во-первых, вам понадобится сервлет-обертка (или, может быть, просто цепочка из другого сервлета, поскольку контейнер сервлетов не будет знать, как бороться с отсутствием частного конструктора.
Во-вторых, вам все равно нужно будет синхронизировать методы сервлета, потому что вы все еще не можете гарантировать, что за один раз в сервлете есть только один поток исполнителя.