Start here. This is the direct spoken answer to practice first.
Overview
The injection style should express whether a dependency is required and when the object becomes valid.
I use constructor injection for required dependencies because the object cannot be created in an invalid state, fields can be final, and tests can instantiate it without a Spring context. Setter injection fits a truly optional or reconfigurable dependency when the class has a sensible default. Field injection hides requirements, prevents final fields, and makes plain unit construction awkward, so I avoid it in application code. With one constructor, Spring does not require @Autowired on that constructor.