Spring 中的自动装配与实例化

tsd*_*sds 2 java spring dependency-injection spring-mvc

我最近开始使用Spring。我正在制作 spring mvc 项目。所以我的问题是,是否更喜欢创建接口并通过 spring 的特定实现自动装配它,或者
在我只有该接口的一种实现的情况下仅使用类实例?

例如:

@Controller

public class MyController {
    @Autowired
    MyService myService;

    @RequestMap("/")
    public String mainPage() {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

或者

@Controller

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

MyService 接口是否只有一个实现?

Tom*_*icz 5

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

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

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

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