Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring中的自动布线与实例化_Java_Spring_Spring Mvc_Dependency Injection - Fatal编程技术网

Java Spring中的自动布线与实例化

Java Spring中的自动布线与实例化,java,spring,spring-mvc,dependency-injection,Java,Spring,Spring Mvc,Dependency Injection,我最近开始使用Spring。我正在制作SpringMVC项目。所以我的问题是,如果我只有一个接口的实现,是更倾向于使用spring的特定实现创建接口并自动连接,还是只使用类实例 例如: @Controller public class MyController { @Autowired MyService myService; @RequestMap("/") public String mainPage() { ... } } 或

我最近开始使用Spring。我正在制作SpringMVC项目。所以我的问题是,如果我只有一个接口的实现,是更倾向于使用spring的特定实现创建接口并自动连接,还是只使用类实例

例如:

@Controller

public class MyController {
    @Autowired
    MyService myService;

    @RequestMap("/")
    public String mainPage() {
        ...
    }
}


如果MyService interface只有一个实现?

在大多数情况下,您应该使用注入,因为:

  • 它简化了单元测试(您可以注入模拟或不同的实现)
  • Spring还可以将一些依赖项注入到
    MyServiceImpl
    中,因为它管理这个对象
  • 您没有将控制器与特定实现耦合

即使您的服务没有接口,由于第二个原因,您也应该考虑注入。


您可能希望跳过Spring的唯一情况是,该类没有任何依赖项并且是无状态的。但这种类很可能是一个根本不需要任何实例的实用程序,因为它只有
静态
成员。

它将取决于MyService是否是一个持有状态的bean。如果MyService不保持状态,那么您不需要创建新实例,您可以让Spring注入它,它具有上述优点

您提供的理由不令人信服。1:许多框架允许您模拟类和接口。2) “Spring也可以向MyServiceImpl注入一些依赖项”——那又怎样?在这种情况下,您也可以实例化。3) 如果对接口进行编码并通过引用其接口来实例化其实现,那么也就是解耦。作为一个也在努力理解为什么自动布线如此受欢迎的人,我发现当人们在没有彻底解释的情况下给出半生不熟的答案时,真的很烦人。
@Controller

public class MyController {
    @RequestMap("/")
    public String mainPage() {
        MyService myService = new MyServiceImpl();
        ...
    }
}