【发布时间】:2018-12-18 18:49:21
【问题描述】:
依我的理解,依赖注入的主要概念是“为接口设计”的实践,以使依赖组件彼此松散耦合。然而,我已经看到许多使用 Spring 开发的系统——在我看来——违反了这个概念[而 Spring Container 在语法级别允许这样做]。在看到这样的代码/实现之后,我开始质疑我对依赖注入作为一个概念的知识/理解。
我经常看到组件通过它们的具体实现自动连接到彼此,这是我的意思的一个例子:
@RestController
public class MyRestController {
@AutoWired
private MyServiceOne serviceOne;
// .. rest of the code if the rest controller here ...
}
@Service
public class MyServiceOne {
@Autowired
private MyRepository repo;
// rest of code of the service here
}
如您所见,“MyServiceOne”是一个具体的类,而不是一个接口,Spring Framework 可以接受。不需要在某个“@Configuration”类中提供“@Bean”方法来注入正确的具体类类型[因为@service已经是一个具体类]。
因此,对于服务层中的任何更改/自定义 [控制器中注入的依赖项],我将不得不更改控制器中的以下行:
@AutoWired
private MyServiceOne serviceOne; //change this to be another service class, or a service class that extends it
这不是松散耦合! [或者是吗?] 在我看来,如果我们要以这种方式使用 Spring DI,最好不要使用它!在应用程序内存中创建了很多 maven/Gradle 依赖项和运行时对象!
我想知道,我对依赖注入是如何作为一个概念/或 Spring 如何处理依赖注入的理解中是否缺少一些东西?
感谢您的指导!
【问题讨论】:
标签: java spring dependency-injection multi-layer