Весь смысл Spring как контейнера заключается в управлении вашими объектами.
Теперь у статики нет четко определенного жизненного цикла (когда создается именно этот объект, кто его удаляет, когда приложение закрывается, и т. Д. c)
Speing отвечает на все эти вопросы, используя методы инъекции зависимости. Если вы уже используете Spring, то вам следует определить этот «общий объект» как Spring Bean (по умолчанию он будет иметь объем синглтона, такой же как у stati c объекта, который вы предложили, но который управляется контейнером Spring, который лучше - это будет управлять жизненным циклом объекта самостоятельно)
Затем, учитывая, что классы, которые должны зависеть от объекта, сами являются компонентами, вы можете добавить этот компонент:
class MySharedObject {}
class MyWebHandler implementsWebHandler {
private final MySharedObject mySharedObject;
public MyWebHandler(MySharedObject mySharedObject) {
this.mySharedObject = mySharedObject;
В дополнение к Таким образом, управление жизненным циклом позволяет легко выполнять модульное тестирование классов, использующих общий объект (в данном случае, например, «MyWebHandler»), - теперь вы можете создать заглушку / макет общего объекта и передать его в обработчик - то, что на самом деле не может быть легко сделано при использовании статики
Итак, если вы можете использовать spring и определить ее как bean-компонент - во что бы то ни стало, использование статики не рекомендуется, если у вас уже есть контейнер внедрения зависимостей