如果我们在春季MVC中交换@service和@repository注释会发生什么

2022-09-04 08:44:55

为什么我们需要在服务实现和DAO实现中使用。在弹簧MVC中互换和注释时没有问题。@service@repository@service@repository


答案 1

根据文献,都是同义词。它们都只是注释的专门化。因此,通常,它们可以一个使用而不是另一个。但。。。你不应该这样做。@Repository@Service@Controller@Component

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

第二个原因是:其中一些注释由不同的Spring模块以不同的方式处理。例如,将处理并将尝试用实现替换由此注释标记的任何接口。Spring还将对此类类应用自动异常转换。另一个例子:进程,并在URL映射中使用用它标记的类。Spring Data JPA@RepositorySpring Web MVC@Controller

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

@Repository、@Service和@Controller也可能在Spring Framework的未来版本中携带额外的语义。因此,如果要在服务图层使用@Component或@Service之间进行选择,@Service显然是更好的选择。


答案 2

这取决于您对框架其余部分使用的内容。从理论上讲,没有什么变化,因为注释基本上是注释。对于或(对于春季Ws和更多)也可以这样说。@Service@Repository@Component@Controller@Endpoint

但是,它们表达了类(服务,存储库)的意图,并使用户清楚地知道该类属于哪个层。

但是,如果您还使用Spring进行事务管理,那么它也是向该类添加异常转换的触发器(另请参阅参考指南)。@Repository

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


推荐