我应该使用哪种方法在Spring控制器中注入10多个服务?

时间:2014-10-20 10:44:49

标签: java spring spring-mvc autowired applicationcontext

我正在开发Spring mvc应用程序。

我有一个控制器,我正在注入超过10个服务。

我从这个控制器中暴露了10多个url,而且我在每种方法中都使用one or two service个对象。

我在考虑两种方法。

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

    由于

1 个答案:

答案 0 :(得分:8)

在大多数情况下,最好的方法是将控制器分解为多个控制器。 拥有太多依赖项的行为是Code Smell,因为您的控制器很可能违反了Single Responsibility Principle

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

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

虽然从ApplicationContext动态查找依赖项会慢一些访问容器依赖项所注入的依赖项,但在几乎所有情况下,我们都无法区分它们。正如我上面提到的,你必须关注的第一个问题是代码可维护性,而不是微观性能/内存问题。