Contents

Spring 中@Component、@Repository和@Service注解

1.简介

在这个快速教程中,我们将了解Spring Framework 中*@Component、@Repository@Service注解之间的区别。*

2. Spring注解

在大多数典型应用程序中,我们有不同的层,如数据访问、表示、服务、业务等。

此外,在每一层中,我们都有各种 bean。为了自动检测这些 bean,Spring 使用类路径扫描注解

然后它在ApplicationContext中注册每个 bean 。

以下是其中一些注释的快速概述:

  • @Component是任何 Spring 管理的组件的通用构造型。
  • @Service在服务层注释类。
  • @Repository在持久层注释类,它将充当数据库存储库。

我们已经有一篇关于这些注释的扩展文章 ,因此我们将重点关注它们之间的差异。

3. 有什么不同?

**这些刻板印象之间的主要区别在于它们用于不同的分类。**当我们注释一个类进行自动检测时,我们应该使用各自的原型。 现在让我们更详细地了解它们。

3.1. @Component

我们可以在整个应用程序中使用 @Component 将 bean 标记为 Spring 的托管组件。Spring 只会使用*@Component获取和注册bean,一般不会查找@Service* 和 @Repository

它们在ApplicationContext中注册,因为它们使用*@Component*注解:

@Component
public @interface Service {
}

@Component
public @interface Repository {
}

@Service 和 @Repository是*@Component*的特例。它们在技术上是相同的,但我们将它们用于不同的目的。

3.2. @Repository

** @Repository的工作是捕获特定于持久性的异常并将它们作为 Spring 的统一未检查异常之一重新抛出**。

为此,Spring 提供了PersistenceExceptionTranslationPostProcessor,我们需要将其添加到我们的应用程序上下文中(如果我们使用 Spring Boot,则已经包括在内):

<bean class=
  "org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

这个 bean 后处理器为任何使用 @Repository注解的 bean 添加了一个顾问。

3.3. @Service

我们用@Service 标记bean 以表明它们持有业务逻辑。该注解除了用于服务层外,没有其他特殊用途。