Я прочитал вопрос Как получить доступ к экземпляру ServletContext из любого метода? что если я хочу получить доступ к контексту сервлета из любого класса в моем веб-проекте на Java, я могу объявить статическое полеэто указывает на ServletContext
из ServletContextListener
, но статическое поле является плохой практикой в веб-приложениях Java, потому что GC не может собрать его, пока JVM не будет выключена (исправьте меня, если я ошибаюсь в этом пункте),Есть ли другой способ получить доступ к ServletContext без использования слушателя или получения его в качестве параметра?Есть другой обходной путь для решения этой проблемы?Я использую JSF 1.2 и JBoss 5.1 GA для веб-приложения.
Примечание. Я знаю, что могу использовать
(ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext();
для доступа к ServletContext, но есть метод, который выполняется наавтозагрузка, которой требуется доступ к ServletContext и FacesContext.getCurrentInstance()
не была инициализирована.
ОБНОВЛЕНИЕ:
Нам нужно загрузить некоторые IP-адреса из файла web.xml в String
константы, когда вебприложение запускается.Для этого мы создали класс Singleton, который загружает контекстные параметры в переменные, а затем заполняет строковые константы некоторыми значениями класса Singleton.Этот класс Singleton управляет большим количеством данных и выдает ошибки исключения из памяти.Чтобы решить эту проблему, мы модифицируем класс Singleton, чтобы он был простым классом, который загружается как атрибут ServerContext, но тогда константы String не могут быть загружены из-за отсутствия экземпляра этого (больше) экземпляра Singleton.