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

@Component, @Repository, @Service的区别

Java 额外说明

收录于:93天前

@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的区别

. . .

相关推荐

额外说明

转:struts2中的constant配置

以下内容转载自: http://blog.csdn.net/thinkscape/article/details/7462670   <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PU

额外说明

Java优化技巧(基础篇)

Java优化技巧(基础篇) 1、使代码逻辑清晰。也有利于代码维护 2、代码异常日志的输出 3、数据尽量不要使用 包装类型,可以避免部分空指针异常。说起来空指针,还有就是不要用对象类型放在前面,例如: 4、一些好用的注解 5、占位符的使用 6、好用的一些工

额外说明

nacos启动 Server check fail, please check server localhost ,port 9848 is available

错误原因 Nacos版本从1.x升级到2.x时,版本兼容性问题,查看服务端和客户端版本 防火墙问题,导致端口无法使用 Docker启动镜像时,8848和9848端口未开启 Java中yml文件配置问题,server-addr配置问题 阿里云或者腾讯云等平

额外说明

6.Python基础语法(四)【条件语句】

目录: Python基础语法(四) 13. Python条件语句 13.1 最简单的if语句 13.2 基本的if语句 13.3 复杂if语句 13.4 看一看elif的好处 13.5 三元表达式 Python基础语法(四) 在本文以及接下来的一篇文章里

额外说明

最近很多同事去了互联网公司,你会选择去互联网大厂吗?

1、最近公司的离职潮有点大        最近公司离职的动静有点大,除了每年正常的人员流动之外,有好几个技术骨干都被其他公司挖走了,这些老员工有的都在公司呆了10年左右,如此规模的离职在公司还是第一次遇到!因为去年开始的疫情,市场上对视频会议的需求量逐渐

额外说明

EasyX基础内容(和易错的地方)

注意代码里面的文字,是易错点 安装 EasyX 绘图库: https://easyx.cn 下载好后,头文件得加上 #include<easyx.h>  代码中一定要加上getchar(),否则图片会一闪而过 ------ ⭐1.用initgraph建立

额外说明

Linux系统下解决:tar (child):XXX: Cannot open: No such file or directory问题

本来用的Linux的Centos系统,想用Linux 的Ubuntu系统,于是就把阿里云更换系统盘一切重新开始了。 目录 问题描述 解决办法 原因 找不到该共享库文件 方法一:链接时使用静态库,编译脚本或者命令中指明jdk文件的完整路径 方法二:将文件直

额外说明

C语言实现:TOM 的借书方案(排列组合)

C语言实现:TOM 的借书方案(排列组合) 文章目录 C语言实现:TOM 的借书方案(排列组合) 1. 问题 2. 实现代码 3. 执行结果 4. 解决方法说明——穷举法 1. 问题 TOM 的借书方案:TOM 共有 5 本书,要借给A、B、C 这 3

额外说明

推荐几个好点的C#的CMS

  推荐几个好点的C#的CMS http://www.sithere.net/article.asp?id=935.html 1、Ludico Ludico是C#编写的居于ASP.NET 2.0的Portal/CMS系统。它的模块化设计是你可以按照你希望

额外说明

wordpress最佳架构_终极WordPress评论-这是您网站的最佳选择吗?

WordPress 最佳架构 You may have heard that WordPress is the most 流行的网站建设者 platform, but maybe you aren’t sure if WordPress is the r

ads via 小工具