Сначала я подумал, что вы можете использовать контейнерный компонент Spring до того, как он будет полностью инициализирован.Иногда это может привести к противоречивому поведению (вещи могут не инициализироваться в том же порядке, когда происходит изменение конфигурации или библиотеки).Ваш последний абзац также указывает на проблемы инициализации зависимостей.
Spring использует ref-соединения, чтобы решить, какие bean-компоненты должны быть инициализированы первыми.Но если ваш метод init обращается к контейнерным bean-компонентам (а не использует встроенные bean-компоненты), Spring об этом не знает, и вы можете получить доступ к bean-компоненту, который был создан, но еще не инициализирован.Кэши и статические инициализаторы кажутся типичными кандидатами для такого рода скорби.
Ваше решение перенести действия по созданию кэша на время после сборки контейнера Spring кажется мне хорошим решением.Если это проблема инициализации зависимости, и вы можете догадаться, какой компонент не завершен (скажем, пул соединений), вы можете использовать «зависимость от» в конфигурации вашего компонента, чтобы сначала инициализировать другой компонент.
Если это проблема инициализации, то я ожидаю, что когда вы получите исключение «набор результатов закрыт», оно всегда будет при первом обращении к оператору while (resultSet.next ())), и у вас ничего не будет в вашемкэш.Либо вещи не инициализированы должным образом, и это происходит сразу же, либо вещи действительно инициализировались правильно, и ваш кэш заполняется.Если кэш заполнен частично и ошибка набора результатов происходит частично при чтении набора результатов, тогда вся теория инициализации уже не имеет смысла.