Java Spring中的自动布线与实例化
我最近开始使用Spring。我正在制作SpringMVC项目。所以我的问题是,如果我只有一个接口的实现,是更倾向于使用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() { ... } } 或
例如:
@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();
...
}
}