@Repository批注的真实目的

时间:2019-06-07 18:30:08

标签: java spring spring-boot spring-mvc

在春季,我们有@ Componenet,@ Repository批注。我研究了一些东西,发现@Component和其他东西之间存在以下差异。

@Repository批注是实现存储库的角色或构造型(也称为数据访问对象或DAO)的任何类的标记。

  1. 我的困惑是,如果我们将@Repository替换为@Component,是否会遇到任何错误(我怀疑)。如果是这样,有可能通过使用@Component +一些手动配置(我们称为样板代码)来实现存储库的原型/功能。我问这个只是为了更好地理解这个概念。

  2. 在博客中发布的第二个主要含义是,如果我们使用基于图层的批注(例如@ Service,@ Controller,@ Repository),则异常处理会更好。但找不到相同的好的解释或示例。

1 个答案:

答案 0 :(得分:1)

来自Spring Framework Documentation

  

Spring提供了进一步的构造型注释:@ Component,@ Service和@Controller。 @Component是任何Spring托管组件的通用构造型。 @ Repository,@ Service和@Controller是@Component的特化,用于更特定的用例(分别在持久层,服务层和表示层中)。因此,您可以使用@Component来注释组件类,但是通过使用@ Repository,@ Service或@Controller来注释组件类,您的类更适合通过工具进行处理或与方面相关联。例如,这些构造型注释成为切入点的理想目标。 @ Repository,@ Service和@Controller在Spring框架的将来版本中也可以带有其他语义。因此,如果在服务层使用@Component或@Service之间进行选择,则@Service显然是更好的选择。同样,如前所述,@ Repository已经被支持作为持久层中自动异常翻译的标记。

这意味着它们在那里,因此您可以使用它们来指示功能。 @Service用于服务,@Repository用于存储库,等等。我们可以这样做,以便我们可以更轻松地确定要修饰的代码的意图。它在定义方面时也很有帮助(例如在面向方面的编程中),因此我们可以说“所有存储库都应有X切入点”,而不必拼写出程序包或其他内容。我们只需要寻找@Repository注释。

我之前对类进行了错误分类(将@Component用于@Service),并且从未遇到任何问题。但这并不是说不会有问题,特别是如果Spring或其他一些库将它们用于AOP的话。