繁体   English   中英

使用注解在Spring中进行依赖注入

[英]Dependecy injection in Spring using annotations

据我所知,依赖注入的主要概念是“接口设计”的实践,以使依赖组件彼此松散耦合。 但是,我看到许多使用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 Handle Dependency Injection如何缺少理解?

感谢您的指导!

通常,使用接口是一种最佳实践,通常应在自己的代码中使用它(与构造函数注入而不是此字段注入一样),但是对允许的内容过于纯粹的做法会适得其反。

例如,我正在使用Amazon DynamoDB,并且需要注入DynamoDB类实例。 我真的更希望能够注入一个接口,但是Amazon的SDK不提供一个接口,并且能够注入该类的配置实例仍然比不注入任何接口好得多。

类似地,使用Spring Boot注入@ConfigurationProperties bean并不少见,这些bean实际上是没有逻辑的类似结构的POJO。 在这种情况下,定义接口只是浪费时间,但是通过(具体)类型注入bean的功能非常有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM