Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果我们在SpringMVC中交换@service和@repository注释,会发生什么_Java_Spring_Spring Mvc_Annotations - Fatal编程技术网

Java 如果我们在SpringMVC中交换@service和@repository注释,会发生什么

Java 如果我们在SpringMVC中交换@service和@repository注释,会发生什么,java,spring,spring-mvc,annotations,Java,Spring,Spring Mvc,Annotations,为什么我们需要在服务实现中使用@service,在DAO实现中使用@repository。在spring MVC中交换@service和@repository注释时不会出现问题。这取决于框架其余部分使用的内容。理论上没有任何变化,因为@服务和@存储库注释基本上是@组件注释。对于@Controller或@Endpoint(对于SpringWS,还有更多)也可以这样说 然而,它们表达了类是什么(服务、存储库)的意图,并让用户清楚地知道该类属于哪一层 但是,如果您也使用Spring进行事务管理,那么@

为什么我们需要在服务实现中使用
@service
,在DAO实现中使用
@repository
。在spring MVC中交换
@service
@repository
注释时不会出现问题。

这取决于框架其余部分使用的内容。理论上没有任何变化,因为
@服务
@存储库
注释基本上是
@组件
注释。对于
@Controller
@Endpoint
(对于SpringWS,还有更多)也可以这样说

然而,它们表达了类是什么(服务、存储库)的意图,并让用户清楚地知道该类属于哪一层

但是,如果您也使用Spring进行事务管理,那么
@Repository
也是该类的触发器(另请参阅)

虽然没有什么东西需要打破,但它可能会在某个时候打破

根据
@Repository
@Service
@Controller
都是同义词。它们都只是
@组件
注释的专门化。因此,一般来说,它们可以一个代替另一个。但是你不应该这样做

第一个原因:这些注释中的任何一个都明确了组件在应用程序中的角色。显示-此组件是否属于控制器、服务或数据层

第二个原因:这些注释中的一些由不同的Spring模块进行不同的处理。例如,
Spring数据JPA
将处理
@Repository
,并尝试用实现替换此注释标记的任何接口。Spring还将对此类类应用自动异常转换。另一个例子:
springwebmvc
处理
@Controller
,并在URL映射中使用标有它的类

实际上,在未来的版本中,Spring的一些模块可以以特定的方式处理
@Service
。不是那么简单的
@组件
。这就是为什么文档建议:

@Repository、@Service和@Controller也可能 在Spring框架的未来版本中提供额外的语义。 因此,如果您选择使用@Component还是@Service来 您的服务层,@service显然是更好的选择


那可能会把你的交易搞砸。服务需要将需要传播的事务传递到DAO。两者都是组件,所以创建bean不会有问题。