The simple answer is - choose one style and use it consistently in our application. But each method has some benefits over another:
Constructor based bean injection always provide an instantiated dependency. So we should use it in situations where the dependency is mandatory or required. While setter based bean injection gives the flexibility to instantiate the dependency at a later stage. So we should use it for optional dependencies. But remember that in case of setter, the dependency will/can be in the null state. So before using it you should always check for nulls or proper instantiation
Setter injection gives flexibility by instantiating only a few dependencies. It does so by calling a particular setter for a property and not all. While constructor injection forces to instantiate all dependencies for a bean. Or we can say setter injection allows delayed instantiation of dependencies
Setter injection has another advantage. We can always change a value assigned to a bean, compared to constructor injection. Which instantiates an object once and always return that reference throughout a bean life-cycle
Historically, in earlier days people used setter injection more than constructor in Spring. And it is also more accustomed to how Spring framework works since everything is configurable flexibly
https://www.linkedin.com/pulse/different-types-dependency-injection-spring-kashif-masood/