It hides dependencies, making code less maintainable.
Using @Autowired on private fields makes dependencies invisible to anyone reading the class, leading to difficulty in testing and understanding code. Constructor injection, by contrast, makes dependencies explicit. In an e-commerce application, if a ProductService depends on a PaymentGateway, constructor injection will clearly show this dependency.
Additional Notes
Why avoid @Autowired on private fields?
Track: Java
Topic: Dependency Injection
Focus: Constructor vs Field Injection
Topics:Constructor vs Field InjectionDependency InjectionJava