java - 我们什么时候应该在 Spring 中使用@Component?

标签 java spring architecture

从软件设计的角度来看,我们什么时候应该使用 @Component 而不是传统的 Java 类(需要通过“new”显式实例化)?例如,如果我们需要创建一个具有以下模式之一的类:

  • 适配器

  • 桥梁

  • 外观

  • 策略

  • 翻译

该类是否应该具有@Component注解(或任何Spring派生注解,例如@Repository/@Controller/@服务)?

最佳答案

Spring 应用了控制反转原则,该原则深入到框架为您处理事情,因此您不必担心。

通过在类上使用@Component,让Spring 为您创建一个bean。 这样,Spring 就可以在您需要时在运行时注入(inject)这个 bean。 (例如通过 Autowiring 你的构造函数)。

是否要为您的类(class)使用此功能由您决定。例如,外观很可能是一个 Spring 组件,这样您就可以在运行时注入(inject)通过外观公开的 API 实现,而无需考虑依赖注入(inject)实现。
例如,我不建议在 DTO 或模型类上使用此注释。这些类主要由数据组成,不适合由 Spring 管理的需要。

其他有趣的相关问题可以帮助您决定何时创建组件:
What's the difference between @Component, @Repository & @Service annotations in Spring?

Spring: @Component versus @Bean

关于java - 我们什么时候应该在 Spring 中使用@Component?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55796139/

相关文章:

java - 从 JAR 为 FOP 加载字体

spring ldap 2.0.1 替换已弃用的 OdmManager

java - 使用 hibernate 和注释的单元测试服务层,没有 DAO

java - 如何在 Eclipse 中找到哪些类实现了特定的接口(interface)?

java - 从 JRuby 调用 Java 代码片段?

java - Spring 日志不是用 log4j2 写的

java - 使用 spring data findAll 从 MongoDB 中检索数据(Example<S> example)

sql - 实现基于策略、基于时间和基于客户的定价

asp.net-mvc - 当实体位于使用 MVC 或 Web API 的另一层时,Models 文件夹将为空

java - Spring data Redis 到 Elastic Cache 连接 list