Инъекция с помощью конструктора более читабельна, и вы можете легко отличить
часть класса, которая связана с внедрением зависимости от остальных.
Во-вторых, все значения инициализируются с самого начала существования класса, поэтому вы можете использовать их, например, в блоках инициализации.
Тесты более чистые, вы точно знаете, какие зависимости вы должны предоставить для тестируемого класса, иначе ваш код не скомпилируется. С полевой инъекцией, вам нужно установить все вручную.
Но все это не означает, что не существует вариантов использования для внедрения поля или метода. Инъекция поля особенно полезна в классах Android, для которых вы не можете управлять такими экземплярами, как Activity.
Я склонен использовать инъекцию поля также в суперклассах, для которых дети используют инъекцию конструктора, и я не хочу загрязнять конструкторов общими объектами. Например. У меня есть BaseViewModel, в котором я внедряю ExceptionHandler в поле, таким образом мне не нужно помещать этот ExceptionHandler в каждый дочерний конструктор класса, а затем передавать вверх в базу.