在Spring@Component vs @Repository vs @Service

介绍:

借助Spring的自动扫描功能,它可以自动检测我们的应用程序中定义的各种bean。 我们通常使用可用的Spring注释之一来注释我们的bean-@ Component,@ Repository,@ Service,@ Controller

在检测到bean时,Spring只需将其注册到ApplicationContext中

在本快速教程中,我们将研究@ Component,@ Repository和@Service Spring批注之间的区别。

我们可以使用@Component注释将bean标记为Spring管理的组件。 换句话说, 它是任何Spring托管组件的通用构造型

我们可以使用<context:component-scan>标记启用自动扫描。 在自动扫描过程中,Spring将扫描并注册所有标有@Component注释的bean:

@Component
public class Employee {...}

@Repository批注是@Component批注的特化:

@Component
public @interface Repository {
}

由于@Repository@Component的一种 ,因此Spring也会自动扫描并注册它们。

@Repository是持久层的构造型。 它的工作是捕获所有与持久性相关的异常,并将其作为Spring DataAccessException重新抛出。

为此,我们应该在应用程序上下文中配置PersistenceExceptionTranslationPostProcessor

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

该bean后处理器将顾问程序添加到所有标有@Repository的 bean。 顾问的职责是将特定于平台的异常转换为Spring统一的未经检查的异常。

就像@Repository一样,@Service@Component的另一个特化:

@Component
public @interface Service {
}

就像@Repository一样,@Service也是@Component的一种 。 这意味着Spring也将自动检测此类bean。

@Service批注表示我们的bean拥有一些业务逻辑。 到目前为止,它没有提供@Component以外的任何特定行为。

尽管如此, 我们仍应使用@Service注释对服务层bean进行注释,以使意图清晰明了。 此外,我们永远不知道Spring是否会选择为其添加某些特定功能。

NutShell的差异:

让我们快速总结一下@ Component,@ Repository@Service之间的区别

  • @Component是最通用的构造型,并将bean标记为Spring托管的组件
  • @Service@Repository批注都是@Component批注的特化
  • @Repository是用于持久层的构造型。 它将所有与持久性相关的异常转换为Spring的DataAccessException
  • @Service用于服务层的bean。 目前,它不提供@Component以外的任何其他功能
  • 在适用的情况下,总是最好使用@Repository@Service批注而不是@Component 。 它更清楚地传达了豆子的意图

结论:

在本微型教程中,我们了解了流行的Spring批注之间的区别– @ Component,@ Service和@Repository。

总而言之,我们应该始终倾向于根据其特定的图层约定使用注释。

翻译自: https://www.javacodegeeks.com/2019/05/component-repository-service-spring.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java项目加减乘除验证码_课堂Java小程序(加减乘除与验证码)

一、编写一个程序&#xff0c;用户输入两个数&#xff0c;求出其加减乘除&#xff0c;并用消息框显示计算结果。1.设计思想&#xff1a;从键盘输入两个数字和运算符&#xff0c;然后计算。将输入的数字及运算符由字符型转换为整型&#xff0c;再用if判断输入的运算符&#xff0…

C语言绘图:可爱叮当猫

大家对于叮当猫可以说是很熟悉了吧&#xff0c;他还有另外一个名字&#xff0c;也就是哆啦a梦。即便你没有看过他的电影动画&#xff0c;也总会听说过的。叮当猫神奇的口袋总是能够掏出我们幻想功能的任何道具&#xff0c;任意门能够带我们去到任何地方&#xff0c;以及插在头上…

jgit git pull_使用JGit API探索Git内部

jgit git pull您是否想过提交及​​其内容如何存储在Git中&#xff1f; 好吧&#xff0c;我有&#xff0c;在上一个下雨的周末我有一些空闲时间&#xff0c;所以我做了一些研究。 因为我对Java的感觉比对Bash的感觉要多&#xff0c;所以我使用JGit和一些学习测试来探究提交的G…

MFC实现Windows锁屏

编辑Windows锁屏锁屏软件相信大家都见过&#xff0c;以前我去网吧上网的时候也用过这个功能&#xff0c;当你有事情需要立即离开&#xff0c;而又不想让别人碰你的电脑&#xff0c;就需要用扫锁屏软件啦&#xff0c;锁住屏幕之后等回来的时候再输入密码解锁。同样的&#xff0c…

pdf 截图 java_java实现pdf文件截图的方法【附PDFRenderer.jar下载】

本文实例讲述了java实现pdf文件截图的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;最近做的一个网站中&#xff0c;有个需求是上传pdf文件&#xff0c;显示pdf的封页&#xff0c;点击封页之后进行在线阅读&#xff0c;这里使用的是PDFRender对pdf进行截图。pub…

检查Java测试中发生了什么

有人想到了在Java单元测试中使用try和catch块的想法&#xff1a; Test public void test() { try { callSomeCode(); } catch (Exception e) { assertEquals( "foo" , e.getMessage()); } } 上面的内容很诱人&#xff0c;但不起作用 。 如果被测代码没有抛出&…

学习红客技术必备

互联网时代已悄悄来临&#xff0c;作为新时代的人们&#xff0c;我们日常生活、工作、学习方面都需要借助互联网来完成&#xff0c;这样&#xff0c;又产生一种新的问题&#xff0c;那就是网络安全的问题&#xff0c;有时我们拼命加班好不容易完成的东西&#xff0c;在一夜之间…

md5withrsa java_浏览器运行java插件报错:Algorithm constraints check failed: MD5withRSA

今天使用kvm管理机房机器的时候发现一只连不上&#xff0c;报以下错误&#xff1a;sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: Algorithm constraints check failed: MD5withRSA我确认我已经把…

jpa 实体映射视图_JPA教程:实体映射-第3部分

jpa 实体映射视图在上一篇文章中&#xff0c;我展示了两种读取/写入持久实体状态的不同方法-字段和属性。 使用字段访问模式时&#xff0c;JPA使用反射直接从实体的字段读取状态值。 如果我们没有明确指定列名&#xff0c;它将直接将字段名转换为数据库列名。 在属性访问模式下…

今晚课题:2019-3-20

今晚课题C/C万年历技术实现原理上课时间&#xff1a;20:30--22:30上课老师&#xff1a;杰越教育-Larry老师上课地址&#xff1a;https://ke.qq.com/course/353889 课程内容&#xff1a;1、C/Cfor逻辑原理2、重要点数据结构分析3、万年历效果实现展示赢在别人休息时&#xff0c;…

python在材料模拟中的应用_材料模拟python_模拟-python模拟-在不妨碍实现的情况下修补方法...

此答案解决了Quuxplusone用户提供的赏金中提到的其他要求&#xff1a;对于我的用例而言&#xff0c;重要的是它可以与MagicMock一起使用&#xff0c;即&#xff0c;它不需要我在构造Potato(在此示例中为spud)实例与调用spud.foo(在本例中)之间插入任何代码。我需要293984865472…

新版本的Selenium 4 Alpha会有什么期望?

我们所有人都属于测试领域&#xff0c;他们熟悉Selenium&#xff0c;Selenium是业界最流行的开源自动化工具之一。 Selenium的创始成员Simon Stewart在2018年8月正式宣布Selenium 4的发布日期以及它将为用户带来哪些新功能时&#xff0c;我们感到非常兴奋。 与Selenium 3一样&…

今晚课题:2019-3-22

今晚课题数据结构必会重点集合上课时间&#xff1a;20:30--22:30上课老师&#xff1a;杰越教育-Larry老师上课地址&#xff1a;https://ke.qq.com/course/353889 课程内容&#xff1a;1、C/C技术工作运用2、数据结构重点数组定义特点3、工作项目数组合理使用赢在别人休息时&…

java 单例 实现_java 实现单例的各种方式

概述上一篇日志中&#xff0c;我们介绍了单例模式的概念和基础的应用本节中&#xff0c;我们就来介绍一下 java 语言中如何编写单例模式类只适合单线程环境的单例模式public class Singleton {private static Singleton instance null;private Singleton() { }public static S…

Drools DMN最新开源引擎性能改进

我们一直在寻求改善Drools DMN开源引擎的性能。 我们最近审查了DMN用例&#xff0c;其中输入数据节点的实际输入总体有所不同。 这突出显示了引擎的次佳性能&#xff0c;我们在最新版本中对此进行了改进。 我想分享我们的发现&#xff01; 基准制定 当我们开始为该用例运行一个…

今晚课题:2019-3-23

今晚课题剖析《服务器高并发-IOCP模型架构》上课时间&#xff1a;2019/03/23 20:30--22:30授课讲师&#xff1a;杰越教育C/C学院--Vico课程链接&#xff1a;https://ke.qq.com/course/353889?tuin7472c9c 课程内容&#xff1a; 1、C/C编程语言入门精通 2、C线程技术在服务器…

使用Selenium WebDriver测试自动化的22条实用技巧

使用Selenium进行测试自动化已使全球的网站测试人员能够轻松执行自动化的网站测试。 Webdriver是Selenium框架的核心组件&#xff0c;通过它您可以针对不同类型的浏览器&#xff08;例如Google Chrome&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Opera&#xff…

java编译源文件_Java源文件编译示例

java程序编译java源文件JavacCompile文件&#xff1a;package yan.demo.javac;import java.io.File;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import javax.tools.Diagnostic;import javax.tools.DiagnosticCollector;import javax.tools.Fi…

这么奇葩搞笑的代码注释你见过吗

程序员作为一种“异类”&#xff0c;虽然他们平时给人们的留下的印象并不太好&#xff0c;觉得他们只会写代码。但是有的时候不得不佩服他们天马行空的想象力&#xff0c;他们可能会利用注释让你噗嗤一笑&#xff0c;下面我们来看看那些奇葩搞笑的代码注释吧。注释1&#xff1a…

facelets_不要在facelets中重复表情

facelets您是否曾经在JSF中看到过像这样的重复EL表达式&#xff1f; <h:inputText value"#{oneBean.name}" rendered"#{anotherBean.showPerson}"/> <h:inputText value"#{oneBean.birthday}" rendered"#{anotherBean.showPerson…