当前位置: 首页 > news >正文

@Repository 注解

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

@Component, @Repository, @Service的区别

官网引用

引用spring的官方文档中的一段描述:

在Spring2.0之前的版本中,@Repository注解可以标记在任何的类上,用来表明该类是用来执行与数据库相关的操作(即dao对象),并支持自动处理数据库操作产生的异常

在Spring2.5版本中,引入了更多的Spring类注解:@Component,@Service,@Controller@Component是一个通用的Spring容器管理的单例bean组件。而@Repository@Service@Controller就是针对不同的使用场景所采取的特定功能化的注解组件。

因此,当你的一个类被@Component所注解,那么就意味着同样可以用@Repository@Service@Controller来替代它,同时这些注解会具备有更多的功能,而且功能各异。

最后,如果你不知道要在项目的业务层采用@Service还是@Component注解。那么,@Service是一个更好的选择。

就如上文所说的,@Repository早已被支持了在你的持久层作为一个标记可以去自动处理数据库操作产生的异常(译者注:因为原生的java操作数据库所产生的异常只定义了几种,但是产生数据库异常的原因却有很多种,这样对于数据库操作的报错排查造成了一定的影响;而Spring拓展了原生的持久层异常,针对不同的产生原因有了更多的异常进行描述。所以,在注解了@Repository的类上如果数据库操作中抛出了异常,就能对其进行处理,转而抛出的是翻译后的spring专属数据库异常,方便我们对异常进行排查处理)。

注解含义
@Component最普通的组件,可以被注入到spring容器进行管理
@Repository作用于持久层
@Service作用于业务逻辑层
@Controller作用于表现层(spring-mvc的注解)

 

其他网上资料

这几个注解几乎可以说是一样的:因为被这些注解修饰的类就会被Spring扫描到并注入到Spring的bean容器中。

这里,有两个注解是不能被其他注解所互换的:

@Controller 注解的bean会被spring-mvc框架所使用。 
@Repository 会被作为持久层操作(数据库)的bean来使用 
如果想使用自定义的组件注解,那么只要在你定义的新注解中加上@Component即可:

@Component 
@Scope("prototype")
public @interface ScheduleJob {...}
  • 1
  • 2
  • 3

这样,所有被@ScheduleJob注解的类就都可以注入到spring容器来进行管理。我们所需要做的,就是写一些新的代码来处理这个自定义注解(译者注:可以用反射的方法),进而执行我们想要执行的工作。

@Component就是跟<bean>一样,可以托管到Spring容器进行管理。

@Service@Controller , @Repository = {@Component + 一些特定的功能}。这个就意味着这些注解在部分功能上是一样的。

当然,下面三个注解被用于为我们的应用进行分层:

@Controller注解类进行前端请求的处理,转发,重定向。包括调用Service层的方法 
@Service注解类处理业务逻辑 
@Repository注解类作为DAO对象(数据访问对象,Data Access Objects),这些类可以直接对数据库进行操作 
有这些分层操作的话,代码之间就实现了松耦合,代码之间的调用也清晰明朗,便于项目的管理;假想一下,如果只用@Controller注解,那么所有的请求转发,业务处理,数据库操作代码都糅合在一个地方,那这样的代码该有多难拓展和维护。

总结

@Component@Service@Controller@Repository是spring注解,注解后可以被spring框架所扫描并注入到spring容器来进行管理 
@Component是通用注解,其他三个注解是这个注解的拓展,并且具有了特定的功能 
@Repository注解在持久层中,具有将数据库操作抛出的原生异常翻译转化为spring的持久层异常的功能。 
@Controller层是spring-mvc的注解,具有将请求进行转发,重定向的功能。 
@Service层是业务逻辑层注解,这个注解只是标注该类处于业务逻辑层。 
用这些注解对应用进行分层之后,就能将请求处理,义务逻辑处理,数据库操作处理分离出来,为代码解耦,也方便了以后项目的维护和开发。

原文: 
https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/whats-the-difference-between-component-repository-service-annotations-in.md

其他: 
http://stackoverflow.com/questions/6827752/whats-the-difference-between-component-repository-service-annotations-in

Spring注解@Autowired、@Resource区别

转载于:https://my.oschina.net/u/3358860/blog/3032650

相关文章:

  • 移动端开发新趋势Flutter
  • 数据结构基础学习之绪论
  • 常用CSS的布局问题;
  • Android技术栈(四)Android Jetpack MVVM 完全实践
  • Jetson TX2 arm板子刷机,安装Caffe
  • 滴滴金融2019新招数:大“桔”为重?
  • 好程序员web前端教程分享js模板模式
  • MySQL判断字段是否为null
  • 数据结构--第四章串、数组和广义表总结
  • 九九乘法-杨辉三角-质数
  • RDS管理控制台如何手机备份MySQL数据库?
  • Jmeter分布式测试的各种坑之jmeter-server修改ip
  • JavaScript作用域相关的总结
  • 为什么SaaS软件集成是未来的必然趋势?
  • 华奥延保对代码的理解(华奥延保)
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • CSS3 变换
  • gops —— Go 程序诊断分析工具
  • iOS 系统授权开发
  • Linux gpio口使用方法
  • React+TypeScript入门
  • Redis中的lru算法实现
  • 给新手的新浪微博 SDK 集成教程【一】
  • 将 Measurements 和 Units 应用到物理学
  • 前端面试总结(at, md)
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • #define
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (C++17) std算法之执行策略 execution
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (算法)求1到1亿间的质数或素数
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原)Matlab的svmtrain和svmclassify
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • (状压dp)uva 10817 Headmaster's Headache
  • *** 2003
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .net CHARTING图表控件下载地址
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET导入Excel数据
  • .net反编译的九款神器
  • .Net组件程序设计之线程、并发管理(一)
  • @Autowired 与@Resource的区别
  • @Autowired标签与 @Resource标签 的区别
  • @Autowired和@Resource的区别
  • [ C++ ] STL_list 使用及其模拟实现