Spring 中的@Component、@Repository 和@Service 注解有什么区别?

新手上路,请多包涵

@Component , @Repository@Service 注释可以在 Spring 中互换使用吗?

换句话说,如果我有一个服务类,并且我将注释从 @Service 更改为 @Component ,它的行为方式是否仍然相同?

或者注释是否也会影响类的行为和功能?

原文由 Colin McCree 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 903
1 个回答

来自 Spring 文档

@Repository 注释是任何类的标记,它可以完成存储库(也称为数据访问对象或 DAO)的角色或构造型。此标记的用途之一是异常的自动翻译,如 异常翻译 中所述。

Spring 提供了进一步的构造型注释: @Component@Service@Controller@Component 是任何 Spring 管理的组件的通用构造型。 @Repository , @Service , and @Controller are specializations of @Component for more specific use cases (in the persistence, service, and presentation layers,分别)。 Therefore, you can annotate your component classes with @Component , but, by annotating them with @Repository , @Service , or @Controller instead, your类更适合由工具处理或与方面相关联。

例如,这些构造型注释是切入点的理想目标。 @Repository@Service@Controller 也可以在 Spring Framework 的未来版本中携带额外的语义。因此,如果您在服务层使用 @Component@Service 之间进行选择, @Service 显然是更好的选择。同样,如前所述, @Repository 已被支持作为持久层中自动异常转换的标记。

注解意义@Component任何 Spring 管理的组件的通用构造型@Repository持久层的原型@Service服务层的原型@Controller表示层的构造型(spring-mvc)

原文由 stivlo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题