小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

@Component, @Repository, @Service的区别

Java 额外说明

收录于:52天前

@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专属数据库异常,方便我们对异常进行排查处理)。

注解 意义
@成分 最常用的组件都可以注入到spring容器中进行管理
@存储库 作用于持久层
@服务 作用于业务逻辑层
@控制器 作用于表现层(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的区别

. . .

相关推荐

额外说明

java 给字符串左补0或右补0

背景 网上找到的左右补0,基本上是对数值进行操作的,所以这里进行了优化,对自符串做处理。 网上对数值字符转化 1100这里没问题,但是 0011 转就是错误的。 方法 /** * 给字符串的左补0或右补0 * @param str

额外说明

zend studio10.5中配置SVN

我本地的zend studio是10.5的,按照百度经验上的配置SVN成功了。配置完成之后发现跟MyEclipse中配置svn差不多,而MyEclipse中我每次都是采用link的方式配置svn的,所以这里将Zend studio配置SVN的步骤记录下来

额外说明

SQL Server 2008复制遇到:进程无法执行“sp_replcmds”命令

文章目录 SQL Server 2008 复制 遇到: 进程无法执行 'sp_replcmds' 命令 故障描述 问题排查 更改方式1 更改方式2 更改方式3 参考资料 SQL Server 2008 复制 遇到: 进程无法执行 ‘sp_replcmds

额外说明

蚂蚁金服软件测试工程师一面面试题(附答案)建议收藏

根据面试录音整理,真实有效。 面试时间:2021.4.17。 面试地点:西溪园区。 面试岗位:软件测试工程师。 一:基础部分: 1. 什么是软件测试? 答:软件测试就是发现软件当中存在的缺陷,提高软件的质量。它贯穿于软件工程整个生命周期中,跟开发一样,是

额外说明

数据结构与算法之美——极客时间03-复杂度分析-如何分析、统计算法的执行效率和资源消耗

QQ 1274510382 Wechat JNZ_aming 商业联盟 QQ群538250800 技术搞事 QQ群599020441 解决方案 QQ群152889761 加入我们 QQ群649347320 共享学习 QQ群674240731 纪年科技am

额外说明

物理层

特性: 机械特性 电气特性 功能特性 过程特性 (数据在通信线路上都是穿行传输) 三大部分: 源点:需要传输的数据 发送器:数据通过发送器编码以后才可传输(相当于起了一个编码的作用) 终点:接受传过来的比特流,然后进行输出(例如把汉字输出到屏幕上来)

额外说明

在 Tree 中查找节点

在对话框中输入要查找的节点的值。 <?xml version="1.0" encoding="utf-8"?> <!-- Searchable Tree control example. uses e4x expression to find a nod

额外说明

开源计算机视觉库OpenCV详解

目录 1、概述 2、OpenCV详细介绍 2.1、OpenCV的起源 2.2、OpenCV开发语言 2.3、OpenCV的应用领域 3、OpenCV模块划分 4、OpenCV源码文件结构 4.1、根目录介绍 4.2、常用模块介绍 4.3、CUDA加速模块

额外说明

深入sql server中的事务

深入sql server中的事务    一.         概述... 1 二.         并发访问的不利影响... 1 1.       脏读(dirty read)... 1 2.       不可重复读(nonrepeatable read

额外说明

删除wordpress_如何从WordPress注释中删除日期和时间

删除 WordPress 您想从您网站上的 WordPress 评论区域中删除日期吗?最近,博主一直希望删除评论日期,以使他们的评论看起来新鲜且常青。在本文中,我们将向您展示如何从 WordPress 评论中删除日期。 您想从您网站上的 WordPres

ads via 小工具