У меня есть ситуация, когда я делю одноэлемент между моим кодом, который запускает встроенный сервер и мое веб-приложение. У меня война с классами и инструментом развертывания. Когда я печатаю экземпляры, я вижу:Singleton на самом деле не синглтон
[email protected]
[email protected]
Так что это не одиночный. Как это работает?
Мой сервер запуска Jetty код:
public static void main(String[] args) throws Exception
{
System.out.println(MySingleton.getInstance());
// start Jetty here and deploy war with WebAppContext()
}
Мой ServletContextListener
сторона код:
public class AppServletContextListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println(MySingleton.getInstance());
}
}
Мой синглтон:
public class MySingleton {
private static MySingleton INSTANCE = new MySingleton();
private MySingleton() {}
public static MySingleton getInstance() {
return INSTANCE;
}
}
Я вынужден исключить внутри конструктора. Похоже, я получаю два разных.
java.lang.Exception
at api.MySingleton.<init>(MySingleton.java:33)
at api.MySingleton.<clinit>(MySingleton.java:22)
at my.project.StartJetty.main(StartJetty.java:41)
java.lang.Exception
at api.MySingleton.<init>(MySingleton.java:33)
at api.MySingleton.<clinit>(MySingleton.java:22)
at api.AppServletContextListener.contextInitialized(AppServletContextListener.java:25)
at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:640)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:229)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1208)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:586)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:449)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:58)
at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:224)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:58)
at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:89)
at org.eclipse.jetty.server.Server.doStart(Server.java:258)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:58)
at my.project.StartJetty.main(StartJetty.java:66)
Вы не оставили ни одного кода. – chrylis
минут пожалуйста. – flyer
Singleton - это шаблон, предполагающий, что он выполнен правильно, у вас будет только один объект в памяти, но это не значит, что вы не можете изменить состояние объекта. Всякий раз, когда вы меняете состояние объекта, в зависимости от реализации hashcode()/equals() эти числа будут меняться. – kosa