在Spring中自动装配与实例化


问题内容

我最近开始使用Spring。我正在做Spring MVC项目。所以我的问题是,是在spring之前制作接口并将其与特定实现自动连接,还是只使用类实例
,以防万一,我只有该接口的一个实现?

例如:

@Controller

public class MyController {
    @Autowired
    MyService myService;

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

要么

@Controller

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

如果只有MyService接口的一种实现?


问题答案:

在大多数情况下,您应该进行注射,因为:

  • 它简化了单元测试(您可以注入模拟或其他实现)
  • Spring还可以注入一些依赖项MyServiceImpl,因为它管理此对象
  • 您没有将控制器与特定实现耦合在一起

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

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