Spring 中 @Component、@Repository、@Service 和 @Controller 注解的区别

Spring 注解简介

Spring 注解 是一种元数据形式,用于提供关于程序的信息。注解被用来提供关于程序的补充信息。它不会直接对其所注解的代码的操作产生影响,也不会改变编译后程序的运行动作。在这里,我们将讨论 Spring 中最重要的 4 个注解之间的区别:@Component、@Repository、@Service 和 @Controller。

@Component 注解

@Component 是一个类级别的注解。它用于将一个类标记为组件。我们可以在整个应用程序中使用 @Component 来将 Bean 标记为 Spring 的托管组件。一个组件通常负责某些特定的操作。Spring 框架提供了另外三个特定的注解,用于在将类标记为组件时使用。

  • @Service
  • @Repository
  • @Controller

!Types Of Component Annotation

> 要了解更多关于 @Component 注解的信息,请参阅文章 Spring @Component 注解详解

A. @Service 注解

在应用程序中,业务逻辑位于服务层,因此我们使用 @Service 注解 来指示某个类属于该层。它是 @Component 注解 的特化形式。关于 @Service 注解最重要的一点是,它只能应用于类。它用于将类标记为服务提供者。总的来说,@Service 注解与提供某些业务功能的类一起使用。当使用基于注解的配置和类路径扫描时,Spring 上下文将自动检测这些类。

> 要了解更多关于 @Service 注解的信息,请参阅文章 Spring @Service 注解详解

B. @Repository 注解

@Repository 注解也是 @Component 注解的一种特化,用于指示该类提供了对象的存储、检索、更新、删除和搜索操作的机制。虽然它是 @Component 注解的特化,但 Spring Repository 类会被 Spring 框架通过类路径扫描自动检测。这个注解是一个通用的构造型注解,非常接近 DAO 模式,其中 DAO 类负责提供数据库表上的 CRUD 操作。

> 要了解更多关于 @Repository 注解 的信息,请参阅文章 Spring @Repository 注解详解

C. @Controller 注解

Spring @Controller 注解也是 @Component 注解的一种特化。@Controller 注解指示特定的类扮演 控制器 的角色。Spring Controller 注解通常与基于 @RequestMapping 注解的注解处理方法结合使用。它只能应用于类。它用于将类标记为 Web 请求处理程序。它主要用于 Spring MVC 应用程序。这个注解充当被注解类的构造型,指示其角色。调度器会扫描此类带注解的类以查找映射的方法,并检测 @RequestMapping 注解。

> 要了解更多关于 @Controller 注解 的信息,请参阅文章 Spring @Controller 注解详解

相似性

开发人员面前经常会出现一个有趣的问题:在 Spring 中,@Component、@Repository、@Service 和 @Controller 注解是否可以互换使用?或者它们是否提供了特定的功能?换句话说,如果我们有一个 Service 类,并将注解从 @Service 更改为 @Component,它的行为方式是否仍然相同?

为了回答这个问题,就 BeanDefinition 的扫描自动检测和依赖注入而言,所有这些注解(@Component、@Repository、@Service 和 @Controller)都是相同的。我们可以用其中一个代替另一个,并且仍然可以达到同样的目的。

现在已经很清楚了,@Component 是一个通用的构造型注解,表示该类是一个 Spring 组件,而 @Repository、@Service 和 @Controller 注解是 @Component 注解的特殊类型。现在让我们通过绘制 所有注解类型之间的区别表 来最终总结,以便更好地理解,如下所示:

@Service 注解

@Repository 注解

@Controller 注解 —

— @Service 注解用于类中,以提供某些业务功能,例如,执行复杂的业务逻辑或计算,如计算员工工资、提取利息数据等。

@Repository 注解用于表明该类处理与数据相关的逻辑(例如,DAO)。它充当数据库与应用程序之间的桥梁,并处理所有与数据库相关的操作。

@Controller 注解用于表示该类充当控制器。它处理用户的请求并返回适当的响应。 它不捕获特定的异常;相反,它抛出所有捕获的异常。

它自动将特定于持久性的异常转换为 Spring 的 DataAccessException。

它主要与 Spring MVC 应用程序结合使用,用于处理 HTTP 请求。 它注解的类是应用程序的“业务层”的一部分。

它注解的类属于应用程序的“持久层”。

它注解的类属于应用程序的“表现层”。 它在业务逻辑层发挥作用。

它在数据访问层(持久层)发挥作用。

它在表现层发挥作用。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/21961.html
点赞
0.00 平均评分 (0% 分数) - 0