r中rep_Spring中@ Component,@ Service,@ Controller和@Repository之间的区别

r中rep

在了解Spring框架中@Repository @Component@Service @Controller@Repository @Controller@Repository批注之间的区别之前,了解@Component批注在Spring中的作用很重要。 在Spring的初始发行期间,所有bean都用于在XML文件中声明。 对于大型项目,这很快成为一项艰巨的任务,Spring团队很快就意识到了问题。 在更高版本中,它们提供基于注释的依赖项注入和基于Java的配置。 从Spring 2.5开始,引入了基于注释的依赖注入 ,该注入自动将类扫描并注册为使用@Component注释进行注释的Spring bean。 这意味着您不必使用<bean&gt ;来声明该bean。 标记并注入依赖项,它将由Spring自动完成。 使用<context:component-scan>标记启用和禁用此功能。

现在您已经知道@Component批注的作用,让我们看看@Service @Controller@Repository @Controller@Repository批注的作用。 它们只是@Component注释在某些情况下的特殊形式。 在Spring MVC中,不是在控制器类上使用@Component ,而是使用@Controllerwhich is more readable and appropriate

通过使用该批注,我们可以做两件事,首先,我们声明该类是Spring bean,应该由Spring ApplicationContext创建和维护,而且还要指出它是MVC设置中的控制器。 特定于Web的工具和功能使用后一种属性。

例如,DispatcherServlet将在使用@Controlle r注释但未使用@Component注释的类上查找@RequestMapping

这意味着@Component@Controller在bean创建和依赖注入方面是相同的,但后来是前者的一种特殊形式。 即使将@Controller注释替换为@Controller @Compoenent ,Spring也会自动检测并注册控制器类,但对于请求映射,它可能无法按预期工作。 您可以进一步看到,

@Service@Repository批注也是如此,它们是服务和持久层中@Component化。 应该使用@Service而不是@Component注释对服务层中的Spring Bean进行注释,而使用@Repositor y注释对持久性层中的Spring Bean进行注释。

通过使用专门的注释,我们用一块石头打了两只鸟。 首先,它们被视为Spring bean,其次,您可以放置​​该层所需的特殊行为。

例如, @Repository's不仅可以帮助基于注释的配置,还可以捕获特定于平台的异常,并将它们作为Spring统一的未经检查的异常之一重新抛出。

虽然如此,您还需要在应用程序上下文中将org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor声明为Spring bean。

这个bean后处理器将顾问程序添加到任何使用@Repository注释的bean中,以便捕获任何特定于平台的异常,然后将其重新抛出为Spring的未经检查的数据访问异常之一。 您还可以在Udemy上查看Spring Framework 5:Guru入门,了解更多详细信息。

这也是Spring Interview常见问题之一,从Spring认证的角度来看也是一个流行的概念。 您还将在这些注释及其在Spring专业认证考试中的用法基础上找到几个问题。

Spring中的组件扫描如何工作?

从Spring 2.0开始,Spring提供了<context:component-scan>和注释驱动的依赖项注入,以自动检测并注册Spring bean,而不是在XML文件中指定它们。 但是,它仅扫描@Component ,通常不会查找@Controller@Service @Controller@Repository 。 因为它们本身被@Component注释,所以它们被扫描。

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

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

因此,说@Controller@Service @Controller@Repository@Component批注的特殊类型是没有错的。 <context:component-scan>拾取它们并将其以下类注册为bean,就像它们使用@Component进行注释一样。

扫描它们是因为它们本身已使用@Component注释进行了注释。 如果您定义自己的自定义注释并使用@Component注释,则还将使用<context:component-scan>

如果您想了解有关Spring中的依赖项注入,自动装配以及不同类型的配置(例如Spring中基于XML,基于注释和Java配置)的更多信息,建议您参加Pluralsight上的Spring基础知识课程 。 也可以免费试用。

摘要

这是Spring框架中@Repository @Component@Service @Controller@Repository @Controller@Repository批注的一个很好的摘要:

  1. @Component是任何Spring管理的组件或bean的通用@Component型。
  2. @Repository是持久层的@Repository型。
  3. @Service是服务层的@Service型。
  4. @Controller是表示层(spring-MVC)的原型。

这是解释Spring Framework中所有这些注释的层次结构的漂亮图表:

这是所有有关的区别@Component@Controller@Service@Repository在Spring框架 。 就像我说过的那样,当启用上下文扫描时,它们全部用于自动检测Spring Bean,并且在依赖项注入方面基本上提供了相同的功能。

它们的唯一区别在于用途,即在Spring MVC中使用@Controller定义控制器,首先是Spring bean,然后是controller。 类似地, @Service Service用于注释类,这些类在Service层中保存业务逻辑,而@Repository在Data Access层中使用。

您可以在Pluralsight上的Bryna Hassen的Spring基础知识课程中了解有关组件扫描以及Spring框架如何自动检测bean的更多信息。 您也可以免费获得10天。

简而言之,您应该根据特定类所属的图层使用最合适的注释。

您可能喜欢的其他Spring Framework文章面试问题

  • Spring MVC中@RestController@Controller之间的@RestController
  • Spring MVC在内部如何工作?
  • Spring MVC中DispatcherServlet的用途是什么?
  • 如何在Java Web应用程序中启用Spring安全性?
  • Spring MVC中的@RequestParam和@PathVariable之间的区别?
  • Craig Walls的《春天在行动》
  • Eugen Paraschiv的Spring Master Class REST

感谢您到目前为止阅读本文。 如果您喜欢这篇文章,请与您的朋友和同事分享。 如果您有任何问题或反馈,请留言。

翻译自: https://www.javacodegeeks.com/2017/11/difference-component-service-controller-repository-spring.html

r中rep

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

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

相关文章

dedian系统云服务器,云服务器选择Ubuntu还是Debian镜像系统?根据熟悉度选择

我们在选择云服务器的时候是不是对于镜像系统选择也有一些纠结&#xff0c;当然对于老用户而言绝对是没有这些问题的。一来我们可以根据自己的熟悉度选择&#xff0c;你平时用什么就选择什么&#xff0c;以及我们可以根据实际的需要有些朋友还会自定义安装自己的镜像系统。当然…

关于压缩工具 7z(7-zip) 如何创建自释放档案(选项 -sfx 的解读)

文章目录一、选项 -sfx 介绍二、自释放安装模块三、创建自释放档案&#xff08;创建安装程序&#xff09;&#xff08;一&#xff09;安装程序配置文件格式&#xff08;二&#xff09;配置文件示例四、创建自释放档案示例&#xff08;一&#xff09;添加 *.txt 文件到自释放档案…

python 正整数 连续多个数之和_vijos - P1302连续自然数和 (公式推导 + python)

18 142297 328388 4121998 2002这道题目假设用C能够直接枚举&#xff0c;非常快就能够过&#xff0c;并且时间&#xff0c;可是这样对我们学习数论知识没有一点帮助。由于数论不仅仅是简单的枚举很多其它的是公式的推导&#xff0c;所以我对于数论题目尽可能的使用耗时长一点的…

远程服务器如何创建分支,git如何远程创建分支

git如何远程创建分支我不知道有什么办法可以直接在远程创建分支而不需要clone到本地。背景需求我的需求是直接在远程服务器上创建一个分支直接在远程服务器上删除一个分支这期间都不需要clone到本地来。原因是当项目有多个repository的时候其中的部分创建了一个分支&#xff0c…

关于压缩工具 7z(7-zip) 的选项 -si(从标准输入流读取数据)的解读

文章目录一、选项 -si 介绍二、示例&#xff08;一&#xff09;使用 Doc2.txt 文件名压缩输入流从文件 Doc.txt 到压缩档案 archive.gz一、选项 -si 介绍 选项 -si 使 7-Zip 从 stdin&#xff08;标准输入了&#xff09; 中使用&#xff08;读取&#xff09;数据。可以和此选项…

adf4351使用_使用ADF绑定创建视图对象行CreateInsert操作

adf4351使用在这篇简短的文章中&#xff0c;我将重点介绍与在任务流中创建新记录的一种非常常见的方法有关的一个小陷阱。 让我们考虑一个简单的任务流程示例&#xff0c;该任务流程创建一个新的VO行&#xff0c;如果用户单击“确定”按钮&#xff0c;则在页面片段上显示该行并…

python实现var模型_copula函数及其Var计算的Python实现

Copula函数思想Copula函数能够把随机变量之间的相关关系与变量的边际分布分开进行研究&#xff0c;这种思想方法在多元统计分析中非常重要。直观来看&#xff0c;可以将任意维的联合分布H(x1,...,xn)P(X1<x1,...,Xn<xn)分成两步来处理。第一步是&#xff0c;对所有的单随…

css鼠标移入线条延中心伸长,css动画效果:鼠标移上去底部线条从中间往两边延伸 - 子成君-分享出去,快乐加倍!-旧版已停更...

本站已不再更新,最新资源请前往zcjun.com获取!css&#xff1a;.top-nav a:after {content: ;position: absolute;z-index: 2;bottom: 0;left: 50%;display: block;width: 165px;height: 1px;transform: translate(-50%);}.top-nav a:hover:after {height: 2px;animation: ad_w…

Spring,Reactor和ElasticSearch:从回调到React流

Spring 5&#xff08;以及Boot 2&#xff0c;将在数周内到货&#xff09;是一次革命。 不是“ XML上的注释 ”或“ Java上的注释类 ”的革命。 这是一个真正的革命性框架&#xff0c;可以编写全新的应用程序类别。 近年来&#xff0c;我对此框架感到有些恐惧。 “ Spring Cloud…

关于压缩工具 7z(7-zip) 的选项 -so(从标准输出流写入数据)的解读

文章目录一、选项介绍二、选项示例&#xff08;一&#xff09;解压缩 archive.gz 输出流并将该输出流写入到 Doc.txt 文件&#xff08;二&#xff09;压缩 Doc.txt 输出流并将该输出流写入到 archive.gz 压缩档案一、选项介绍 选项 -so 使 7-Zip 从 stdout&#xff08;标准输出…

python删除重复文字_python如何删除文件中重复的字段

本文实例为大家分享了python如何删除文件中重复字段的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下原文件内容放在list中&#xff0c;新文件内容按行查找&#xff0c;如果没有出现在list中则写入第三个文件中。import csvfiletxt1 E:/gg/log/log1.txtfilecsv1 E:…

css 深度选择器 ,CSS的coped私有作用域和深度选择器

大家都知道当 编译前&#xff1a;.example {color: red;}编译后&#xff1a;.example[data-v-f3f3eg9] {color: red;}看完你肯定就会明白了&#xff0c;其实是在你写的组件的样式&#xff0c;添加了一个属性而已&#xff0c;这样就实现了所谓的私有作用域。但是也会有弊端&…

关于压缩工具 7z(7-zip) 的选项 -u(更新压缩档案中的文件)的解读

文章目录一、选项介绍&#xff08;一&#xff09;参量说明二、示例一、选项介绍 更新选项 -u 指定压缩档案中文件的更新及创建的方式。可以和此选项结合使用的命令&#xff1a;a (添加)&#xff0c; d (删除)&#xff0c; u (更新) 。 语法格式&#xff1a;-u[-][action_set]…

营销自动化权威指南_免费电子书:自动化根本原因分析的完整指南

营销自动化权威指南自动化根本原因分析入门指南。 我们在OverOps过夜&#xff0c;梦想着拥有一个自动化的世界。 看起来似乎有些怪异&#xff0c;但是您能想象您和您的团队会比那些不眠之夜和无休止的日子在日志文件中筛选以找出问题出在哪里的快乐多了吗&#xff1f; 这些乏…

光立方原理讲解_90%人不理解什么是防眩光射灯 防昡晕 防炫光,。怎么选项led防眩灯...

关于LED射灯“防眩光(防炫光)”实在想和各位朋友讲解一下防眩光原理 &#xff0c;因为我们碰到90%以上装修朋友&#xff0c;总是把眩光理解为简单的不刺眼的光。我可以负责的告诉大家 &#xff0c;市面上没有不刺眼的射灯&#xff0c;不管是LED芯片直接射出来的光&#xff0c;还…

打印机设置虚拟服务器,虚拟机打印机服务器设置

虚拟机打印机服务器设置 内容精选换一换迁移前&#xff0c;您需要设置目的端服务器。该目的端用来接收源端的数据&#xff0c;同时您也可以使用该目的端进行迁移测试和启动目的端。只有“迁移阶段”为“已就绪”时才可设置目的端。或单击“操作”列的“更多 > 设置目的端”&…

关于压缩工具 7z(7-zip) 的选项 -w(设置工作目录)的解读

文章目录一、选项介绍二、语法格式三、选项示例一、选项介绍 选项 -w 为文件压缩设置临时的工作目录。可以和此选项结合使用的命令&#xff1a;a (添加)&#xff0c; d (删除)&#xff0c; u (更新) 。 默认情况下&#xff0c;7-Zip 新建一个压缩档案时&#xff0c;会临时在当…

nginx fastcgi python_Nginx + webpy 和FastCGI搭建webpy环境

web.py 是一个轻量级Python web框架&#xff0c;它简单而且功能大。web.py是一个开源项目。1、所需要的软件&#xff1a;Nginx nginx-1.4.7.tar.gz (需要包含fastcgi和rewrite模块)。Webpy 0.32Spawn-fcgi 1.6.2Flup注意&#xff1a;Flup是最常见的忘记装的软件&#xff0c;需要…

datastore_使用Spring Session和JDBC DataStore进行会话管理

datastore在Web应用程序中&#xff0c;用户会话管理对于管理用户状态至关重要。 在本文中&#xff0c;我们将学习在集群环境中管理用户会话所采用的方法&#xff0c;以及如何使用Spring Session以更简单和可扩展的方式实现该方法。 通常在生产环境中&#xff0c;我们将有多个服…

关于压缩工具 7z(7-zip) 的选项 -x(排除文件)的解读

文章目录一、选项介绍二、选项语法三、选项示例一、选项介绍 选项 -x 用来指定某一文件或某一类文件从操作中排除&#xff0c;此选项可同时排除多个类型。可以和此选项结合使用的命令&#xff1a;a (添加)&#xff0c; d (删除)&#xff0c; e (释放)&#xff0c; l (列表)&am…