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

r中rep_Spring中@ Component,@ Service,@ Controller和@Repository之间的区别相关推荐

  1. Spring中@ Component,@ Service,@ Controller和@Repository之间的区别

    在了解Spring框架中@Repository @Component , @Service @Controller , @Repository @Controller和@Repository批注之间的 ...

  2. jvm优化_Java中JVM,JIR,JRE和JDK之间的区别

    jvm优化 JRE,JVM和JDK是您经常与Java编程语言结合使用的三个术语,大多数人会混淆它们或认为它们都是相同的. 在本文中,您将了解什么是Java运行时(JRE),什么是Java虚拟机(JVM ...

  3. java中gt与gtgt与gtgtgt与lt之间的区别

    1. 今天在刷剑指,遇到一道题: **输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示.** 看到一个使用逻辑移位的放大进行的操作,很受启发,顺便整理一下从未用到的符号含义. 2. 符号 ...

  4. Java中的executeQuery_java execute,executeQuery和executeUpdate之间的区别

    java execute,executeQuery和executeUpdate之间的区别 关注:269  答案:4  信息版本:手机版 电脑版 解决时间 2021-01-25 18:31 提问者怪咖 ...

  5. Spring注入方式及用到的注解 -----@Component,@Service,@Controller,@Repository

    注入方式: 把DAO实现类注入到service实现类中,把service的接口(注意不要是service的实现类)注入到action中,注 入时不要new 这个注入的类,因为spring会自动注入,如 ...

  6. Spring中@Controller和@RestController之间的区别

    1. Controller, RestController的共同点 都是用来表示Spring某个类的是否可以接收HTTP请求 2.  Controller, RestController的不同点 @C ...

  7. ASP.NET Core中GetService()和GetRequiredService()之间的区别

    上篇文章<在.NET Core 3.0中的WPF中使用IOC图文教程>中,我们尝试在WPF中应用.NET Core内置的IOC进行编程,在解析MainWindow的时候我用了GetRequ ...

  8. Windows sever中域、域树、域森林之间的区别与联系

    域(Domain) 在说域这个概念之前,我们先来回忆一下工作组. 首先,工作组中,每一台计算机都独立维护自己的资源,不能集中管理所有网络资源. 其次,每一台计算机都在本地存储用户的帐户 第三,一个账户 ...

  9. MySQL中INDEX,PRIMARY,UNIQUE,FULLTEXT之间的区别?

    创建MySQL表时,PRIMARY,UNIQUE,INDEX和FULLTEXT有什么区别? 我将如何使用它们? #1楼 我觉得这已经很好地涵盖了,也许除了以下几点: 如果选择性足够,简单的KEY / ...

最新文章

  1. [个人博客作业Week7]软件工程团队项目感想与反思
  2. weka: naive bayes
  3. 在字符串String类型常忘记使用equals()进行值比较的问题
  4. 七种寻址方式(直接寻址方式)
  5. 小米8大幅降价促销 性价比十足!
  6. SAP License:SAP MM物料管理
  7. 获取客户端的IP地址
  8. Matlab中使用varargin来实现参数可变的函数
  9. Java中的几种设计模式:创建型模式,结构型模式
  10. githubpage 配置 出现DNS解析失败
  11. 测温传感器 温度传感器 温度传感器生产厂家 温度变送器 温度感应器 温度测量 热电偶 热电偶传感器 热电偶套管 热电偶温度传感器 热电偶温度计 热电阻传感器 热电阻温度计 电阻温度探测 精密RTD
  12. mysql单表1000万条_mysql单表千万条数据测试
  13. python怎么做网站6_网站开发学习Python实现-Django学习-自学注意(6.1.3)
  14. php时间问候语,时间问候语大全
  15. JAVA三层架构详解
  16. OpenStack Train Magnum部署Kubernetes(1)--部署OpenStack Train
  17. 性能测试之性能优化篇
  18. iwpriv ra0 show stat 与 iwpriv ra0 stat 是有区别的
  19. DHCP服务器备份(冗余)实验
  20. Android实习生首次面试总结

热门文章

  1. P4383 [八省联考 2018] 林克卡特树(wqs二分、树形dp)
  2. CF650E-Clockwork Bomb【并查集】
  3. jzoj4051-序列统计【NTT】
  4. P3321-Apple Tree【树状数组】
  5. ssl2644-线段树练习1【线段树】
  6. 牛客练习赛 65 (待补E-网络流)
  7. 初一模拟赛总结(2019.6.15)
  8. GYM 101908F - Music Festival
  9. 2017西安交大ACM小学期数论 [等差数列]
  10. SpringBoot2.1.9 多Redis Lettuce配置