title: How do I properly inject many services into Spring MVC controller?
body: <p>I have created Spring MVC application that has 3 user types. I've created separate controllers for each of them. Now in each of them, I have to inject service classes so I have done it like this:</p>
  
  <pre><code>@Controller
  @RequestMapping("teacher")
  public class TeacherController {
  
  @Autowired
  private StudentService studentService;
  
  @Autowired
  private GradeService gradeService;
  
  @Autowired
  private SubjectService subjectService;
  
  @Autowired
  private StudentGroupService studentGroupService;
  
  @Autowired
  private NewsService newsService;
  
  @GetMapping("/index")
  public String indexPage(Model theModel) {
      List&lt;News&gt; tempNewsList = newsService.getNews();
  
      theModel.addAttribute("theNewList", tempNewsList);
  
      return "teacher/index";
  }
  </code></pre>
  
  <p>This code is using field injection. Which is, as I now learned, a solution that should be avoided and replaced with constructor injection. So I've Autowired a constructor with all of these fields like this:</p>
  
  <pre><code>@Autowired
  public TeacherController(StudentService studentService, GradeService gradeService, SubjectService subjectService, StudentGroupService studentGroupService, NewsService newsService) {
      this.studentService = studentService;
      this.gradeService = gradeService;
      this.subjectService = subjectService;
      this.studentGroupService = studentGroupService;
      this.newsService = newsService;
  }
  </code></pre>
  
  <p>Is this a good solution, creating such verbose constructor in such simple code? And what if I had even more services in my code? Is this even acceptable or in this case should I refactor my code, e.g. delegate services to other services or create more controllers?</p>