Java 我应该使用哪种方法注入10+;Spring控制器中的服务?

Java 我应该使用哪种方法注入10+;Spring控制器中的服务?,java,spring,spring-mvc,autowired,applicationcontext,Java,Spring,Spring Mvc,Autowired,Applicationcontext,我正在开发SpringMVC应用程序 我有一个控制器,我在其中注入了10多个服务 我从这个控制器公开了10多个url,每次我在每个方法中使用一个或两个服务对象 我想到了两种方法 使用@Autowired直接注入所有服务 需要时,在运行时从ApplicationContext获取服务 请告诉我哪种方法更好,或者两种方法在内存使用和时间方面是相同的 谢谢在大多数情况下,最好的方法是将控制器拆分为多个控制器。 依赖项太多是一个问题,因为您的控制器很可能违反 在大多数情况下,对许多依赖项使用@Autow

我正在开发SpringMVC应用程序

我有一个控制器,我在其中注入了10多个服务

我从这个控制器公开了10多个url,每次我在每个方法中使用一个或两个服务对象

我想到了两种方法

  • 使用@Autowired直接注入所有服务
  • 需要时,在运行时从ApplicationContext获取服务
  • 请告诉我哪种方法更好,或者两种方法在内存使用和时间方面是相同的


    谢谢

    在大多数情况下,最好的方法是将控制器拆分为多个控制器。 依赖项太多是一个问题,因为您的控制器很可能违反

    在大多数情况下,对许多依赖项使用
    @Autowired
    和使用ApplicationContext动态检索依赖项都是平庸的解决方案,应尽可能避免。您应该做的是分解控制器,然后使用
    @Autowired
    (最好是构造函数而不是字段注入-查看更多详细信息)使Spring注入依赖项

    在您描述的情况下,您不应该担心建议解决方案的性能或内存消耗,而应该担心代码的可维护性


    虽然从ApplicationContext动态查找依赖项比访问容器依赖项注入的依赖项要慢一点,但在几乎所有情况下,您都无法分辨出区别。如上所述,您必须关注的第一个问题是代码可维护性,而不是微性能/内存问题。

    感谢您指出
    代码气味问题和
    单一责任原则。我将打破我的控制器,并将尝试执行单一责任原则。我有一个问题,从你的答案。正如你提到的,这两种方法都是平庸的解决方案,应该避免。你是想说我应该避免注入并使用
    new
    创建对象吗?我的意思是你应该避免注入10个依赖项。您应该分解控制器,然后使用
    @Autowired
    注入相关的依赖项,谢谢您的帮助。我已经接受了你的回答。您能告诉我,使用构造函数注入比字段注入(任何标准实践)有什么优势吗?用户构造函数注入的优势是类更可读(依赖项通过构造函数立即可见)和更可测试(只需使用构造函数创建类)。同时检查我的最新答案