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

Java 我们什么时候应该在Spring中使用@Component?,java,spring,architecture,Java,Spring,Architecture,从软件设计的角度来看,我们什么时候应该使用@Component而不是传统的Java类(需要通过“new”显式实例化)?例如,如果我们需要创建一个属于以下模式之一的类: 适配器 桥 立面 策略 翻译器 类是否应该有@组件注释(或任何Spring派生的注释,如@存储库/@控制器/@服务)?Spring应用了控制反转原则,它深入到框架为您处理东西,因此您不必担心 通过在类上使用@Component,您可以让Spring为您创建一个bean。 例如,通过这种方式,Spring可以在需要时在运行时注入

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

  • 适配器

  • 立面

  • 策略

  • 翻译器


类是否应该有
@组件
注释(或任何Spring派生的注释,如
@存储库
/
@控制器
/
@服务
)?

Spring应用了控制反转原则,它深入到框架为您处理东西,因此您不必担心

通过在类上使用@Component,您可以让Spring为您创建一个bean。 例如,通过这种方式,Spring可以在需要时在运行时注入这个bean。(例如,通过自动连接构造函数)

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

可以帮助您决定何时创建组件的其他有趣的相关问题:


当其他类别依赖于标记的类别时,将类别标记为@组件(或衍生工具)。它允许Spring连接依赖项。当您希望它是Springbean时,应该对它进行注释,这样可以将它注入其他Springbean,并将其他Springbean注入其中。该类是适配器、网桥还是其他任何东西都无关紧要。