В заключение, согласно документации, если существует много DI, вы можете оценить каждый и попытаться использовать набор на основе и / или на основе конструктора. Еплайн документации, который использовать ниже:
DI на основе конструктора или сеттера?
Поскольку вы можете смешивать DI на основе конструктора и сеттера, рекомендуется использовать конструкторы для обязательных зависимостей, а также методы установки или методы настройки для необязательных зависимостей. Обратите внимание, что использование аннотации @Required в методе сеттера может использоваться для того, чтобы свойство стало обязательной зависимостью.
Команда Spring, как правило, поддерживает внедрение конструктора, поскольку оно позволяет реализовывать компоненты приложения как неизменяемые объекты и гарантирует, что требуемые зависимости не равны NULL. Более того, внедренные конструктором компоненты всегда возвращаются клиентскому (вызывающему) коду в полностью инициализированном состоянии. В качестве примечания следует отметить, что большое количество аргументов конструктора является неприятным запахом кода, подразумевая, что класс, вероятно, имеет слишком много обязанностей и должен быть реорганизован для лучшего решения правильного разделения проблем.
Внедрение сеттера должно в первую очередь использоваться только для необязательных зависимостей, которым могут быть назначены разумные значения по умолчанию в классе. В противном случае проверки не-null должны выполняться везде, где код использует зависимость. Одним из преимуществ внедрения сеттера является то, что методы установки делают объекты этого класса пригодными для реконфигурации или повторного внедрения позже. Таким образом, управление через JMX MBeans является убедительным примером использования для инъекции сеттера.
Используйте стиль DI, который наиболее подходит для определенного класса. Иногда, когда вы имеете дело со сторонними классами, для которых у вас нет исходного кода, выбор делается за вас. Например, если сторонний класс не предоставляет каких-либо методов-установщиков, тогда внедрение конструктора может быть единственной доступной формой DI.