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

时间:2016-02-17 06:52:08

标签: java spring spring-mvc annotations

为什么我们需要在服务实现中使用@service并在DAO实施中使用@repository。在spring MVC中交换@service@repository注释时没有问题。

2 个答案:

答案 0 :(得分:7)

根据documentaion @Repository@Service@Controller都是同义词。它们都只是@Component注释的特化。因此,一般来说,它们可以用于其他一种。但是......你不应该这样做。

第一个原因:任何此注释都会明确您的组件在应用程序中的作用。显示 - 此组件属于控制器,服务或数据层。

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

实际上,在将来的版本中,Spring的某些模块可以以特定方式处理@Service。不那么简单@Component。这就是文档建议的原因:

  

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

答案 1 :(得分:1)

这取决于您对框架其余部分使用的内容。理论上,由于@Service@Repository注释基本上是@Component注释,因此没有任何变化。 @Controller@Endpoint也是如此(对于Spring Ws而且还有更多)。

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

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

虽然没有 可以打破它,但可能会在某个时候。