依赖注入的主要概念——据我所知——是“为接口设计”的实践,以使依赖组件彼此松散耦合。但是,我看到许多使用 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 如何处理依赖注入的理解中是否缺少一些东西?
感谢您的指导!