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

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

Spring 注解 是提供有关程序的数据的元数据的一种形式。注释用于提供关于程序的补充信息。它对注释代码的操作没有直接影响。它不会改变已编译程序的操作。在这里,我们将讨论Spring中4个最重要的注释@Component, @Repository, @Service和@Controller之间的区别。

@Component 注解

@Component是一个类级注释。它用来将一个类表示为一个组件。我们可以在整个应用程序中使用@Component将这些bean标记为Spring的托管组件。一个组件负责一些操作。Spring框架在将类标记为组件时提供了另外三个特定的注释。

  1. @Service
  2. @Repository
  3. @Controller

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

@Service 注解

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

@Repository 注解

@Repository注释也是一种专门化 @Component 注解,用于表明类提供了对对象进行存储、检索、更新、删除和搜索操作的机制。虽然它是@Component注释的专门化,所以Spring Repository类是通过类路径扫描由Spring框架自动检测的。这个注释是一种通用原型注释,非常接近DAO模式,其中DAO类负责提供数据库表上的CRUD操作。

@Controller 注解

Spring @Controller注释也是一个专门化的 @Component 注解。@Controller注释表示一个特定的类充当 controller . Spring Controller注释通常与基于的注释处理程序方法结合使用 @RequestMapping注释。它只能应用于类。它用于将一个类标记为web请求处理程序。它主要用于Spring MVC应用程序。这个注释充当被注释类的原型,指出它的角色。dispatcher会扫描这些带注释的类,寻找映射的方法并进行检测 @RequestMapping 注解.

相似处

在开发人员面前出现的一个有趣的问题是,@Component、@Repository、@Service和@Controller注释是否可以在Spring中互换使用,或者它们是否提供了任何特定的功能?换句话说,如果我们有一个Service类,我们把注释从@Service改为@Component,它的行为还会保持不变吗?

因此,为了回答相同的问题,对于BeanDefinition的扫描自动检测和依赖注入,所有这些注释(@Component、@Repository、@Service和@Controller)都是相同的。我们可以用一个来代替另一个,仍然可以走我们的路。

现在我们已经清楚了@Component是一个通用原型注释,它表明这个类是spring组件,而@Repository、@Service和@Controller注释是@Component注释的特殊类型。现在让我们最后通过绘图来结束 所有注释类型之间的差异表 要更好地把握,认识到以下几点:

@Service 注解 @Repository 注解 @Controller 注解
@Service注释用于提供某些业务功能的类。 @Repository注释用于表示类提供了对对象进行存储、检索、更新、删除和搜索操作的机制。 @Controller注释表示一个特定的类充当控制器的角色。
@Service注释是@Component注释的专门化。 @Repository注释也是@Component注释的专门化。 @Controller注释也是@Component注释的专门化。
它用于将类标记为服务提供者。 它用于将接口标记为DAO(数据访问对象)提供程序。 它用于将一个类标记为web请求处理程序。
它是服务层的原型。 它也是DAO层的原型。 它也是表示层(spring-MVC)的原型。
切换是可能的。但不建议这样做。 切换是可能的。但不建议这样做。 我们不能将这个注释与@Service或@Repository之类的任何其他注释进行切换。
它是一个原型注释。 它也是一个原型注释。 它也是一个原型注释。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程