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 注解的特殊类型。现在让我们通过绘制 所有注解类型之间的区别表 来最终总结,以便更好地理解,如下所示:
@Repository 注解
—
@Repository 注解用于表明该类处理与数据相关的逻辑(例如,DAO)。它充当数据库与应用程序之间的桥梁,并处理所有与数据库相关的操作。
它自动将特定于持久性的异常转换为 Spring 的 DataAccessException。
它注解的类属于应用程序的“持久层”。
它在数据访问层(持久层)发挥作用。