首页 > Java > Spring 中的 @Component、@Repository 和 @Service 注解有什么区别?

Spring 中的 @Component、@Repository 和 @Service 注解有什么区别?

上一篇 下一篇

和注释可以在 Spring 中互换使用,或者除了充当符号设备之外,它们是否提供任何特定功能?@Component@Repository@Service

换句话说,如果我有一个服务类,并且我将注释从 更改为 ,它的行为是否仍然相同?@Service@Component

还是注释也会影响类的行为和功能?

分割线

网友回答:

由于许多答案已经说明了这些注释的用途,因此我们将在这里重点介绍它们之间的一些细微差异。

首先是相似性

值得再次强调的第一点是,关于 BeanDefinition 的扫描自动检测和依赖注入,所有这些注释(即@Component、@Service、@Repository、
@Controller)都是相同的。我们可以使用一个代替
另一个,并且仍然可以绕过我们的方式。


@Component、@Repository、@Controller和@Service之间的差异

@Component

这是一个通用的构造型注释,指示类是弹簧组件。

@Component
特别之处在于只扫描而不寻找,而且一般来说。扫描它们是因为它们本身带有注释。
<context:component-scan>@Component@Controller@Service@Repository@Component

只需看一下 和注释定义:@Controller@Service@Repository

@Component
public @interface Service {
    ….
}
@Component
public @interface Repository {
    ….
}
@Component
public @interface Controller {
    …
}

因此,说这种说法并没有错,并且是特殊类型的注释。 拾取它们并将其后续类注册为 bean,就像它们被注释为 .@Controller@Service@Repository@Component<context:component-scan>@Component

特殊类型的注释也会被扫描,因为它们本身是用注释注释的,这意味着它们也是 s。如果我们定义自己的自定义注释并对其进行注释,它也将被扫描@Component@Component@Component<context:component-scan>


@Repository

这是为了指示该类定义了一个数据存储库。

@Repository有什么特别之处?

除了指出这是一个基于注释的配置之外,它的工作是捕获特定于平台的异常,并将它们作为 Spring 的统一未检查异常之一重新抛出。为此,我们提供了 ,我们需要在 Spring 的应用程序上下文中添加,如下所示:@RepositoryPersistenceExceptionTranslationPostProcessor

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

这个 bean 后处理器向任何带有注释的 bean 添加一个顾问,以便捕获任何特定于平台的异常,然后作为 Spring 未经检查的数据访问异常之一重新抛出。@Repository


@Controller

注释指示特定类充当控制器的角色。注释充当带注释的类的构造型,指示其角色。@Controller@Controller

@Controller有什么特别之处?

我们不能将此注释与任何其他类似或 ,即使它们看起来相同。
调度程序扫描用注释的类,并检测其中用注释注释的方法。我们只能在那些类被注释的方法中使用,并且它不适用于、、等…
@Service@Repository@Controller@RequestMapping@RequestMapping@Controller@Component@Service@Repository

注意:如果一个类已经通过任何替代方法注册为bean,例如通过@Bean或通过@Component@Service等…注释,然后如果类也使用@RequestMapping注释进行注释,则可以选择@RequestMapping。但那是另一回事。


@Service

@ServiceBean 在存储库层中保存业务逻辑和调用方法。

@Service有什么特别之处?

除了它用于指示它保存业务逻辑的事实之外,此注释中没有其他值得注意的内容;但谁知道呢,春天将来可能会增加一些额外的特殊。


还有什么?

与上面类似,在未来,Spring 可能会根据它们的分层约定为 和 添加特殊功能。因此,尊重约定并按照图层使用它始终是一个好主意。@Service@Controller@Repository

分割线

网友回答:

来自 Spring 文档:

注释是履行存储库
(也称为数据访问对象
或 DAO)的角色或构造型的任何类的标记。此标记的用途之一是异常的
自动翻译,如异常转换中所述。
@Repository

Spring 提供了进一步的构造型注释:、
和 。 是任何
Spring 管理的组件的通用构造型。、 和 是
更具体用例的专用化(分别在
持久性层、服务和表示层)。
因此,您可以使用 对组件类进行批注,
但是,通过使用 、 或
改为对组件类进行批注,您的类更适合通过工具
进行处理或与方面关联。
@Component@Service@Controller@Component@Repository@Service@Controller@Component@Component@Repository@Service@Controller

例如,这些刻板型注释
是切入点的理想目标。、 ,并且
还可以在 Spring 框架的未来
版本中携带其他语义。因此,如果您在使用或为
服务层做出选择,显然是
更好的选择。同样,如前所述,已经
支持将其作为
持久性层中自动异常转换的标记。
@Repository@Service@Controller@Component@Service@Service@Repository

注解 意义
@Component 任何 Spring 管理的组件的通用构造型
@Repository 持久性层的构造型
@Service 服务图层的构造型
@Controller 表示层的构造型 (弹簧-MVC)

分割线

网友回答:

它们几乎是一样的——它们都意味着这个班级是春豆。,并且是专门的 s。您可以选择对它们执行特定操作。例如:@Service@Repository@Controller@Component

  • @Controller豆子被弹簧-MVC使用
  • @RepositoryBean 符合持久性异常转换的条件

另一件事是,您将组件语义地指定为不同的层。

提供的一件事是您可以使用它注释其他注释,然后以与 相同的方式使用它们。@Component@Service

例如,最近我做了:

@Component
@Scope("prototype")
public @interface ScheduledJob {..}

因此,所有注释的类都是春豆,除此之外,还注册为石英工作。您只需要提供处理特定注释的代码。@ScheduledJob

模板简介:该模板名称为【Spring 中的 @Component、@Repository 和 @Service 注解有什么区别?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 263次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 02-15
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
响应式 微信图片 微信模板 单页式简历模板 企业网站 微信公众平台 html5 微信文章 自适应 微信素材
您可能会喜欢的其他模板