1

Я читаю Спринг документации и мне интересно, что они имели в виду, написав:Как инжекция зависимостей на основе конструктора влияет на неизменность?

Весна команда обычно выступает внедрение конструктора, как она позволяет реализовать компоненты приложения в качестве неизменных объектов и обеспечить необходимые зависимости не нулевой ,

Я не вижу, каким образом он позволяет внедрять компоненты как неизменные. Хотя я понимаю, что использование DI на основе конструктора аналогично естественному, Java-способу создания объектов класса с конечными полями, что препятствует тому, чтобы объект менял ссылки на поля.

Было ли это единственной причиной, по которой они использовали такую ​​фразу? Может ли кто-нибудь объяснить это мне?

Спасибо.

+3

Именно по этой причине вы предлагаете. Если вы хотите использовать инъекцию сеттера, вам придется иметь изменяемый объект. –

ответ

3

Если у вас есть класс с зависимостями, и все эти зависимости предоставляются в качестве аргументов конструктора, то вы можете знать, что объект никогда не будет существовать в состоянии, где зависимости недопустимы (если вы явно не передали значения null или неправильные значения, но вы можете сделать некоторую проверку в конструкторе, если хотите).

Ваш класс больше не нуждается в сеттерах для этих зависимостей, поэтому вы знаете, что это невозможно (при условии, что поля являются закрытыми) для кода изгоев в вашем приложении для замены действительных зависимостей на недопустимые. Это особенно применимо, если компонент имеет высокую видимость (например, область приложения) и используется многими объектами клиента.

Возможно, что класс может быть полностью выполнен неизменным (после его создания невозможно изменить его состояние). Это было бы так, если бы не были сеттеры или какие-либо другие методы, которые изменяли состояние, и все поля были частными.

Непрерывный объект, скорее всего, будет хорошо вести себя в многопоточном приложении. Несмотря на то, что класс по-прежнему должен быть внутренне потокобезопасным, вам не нужно беспокоиться о том, что внешние клиенты координируют доступ к объекту.

Смежные вопросы