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

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

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

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

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

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

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

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

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

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

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