如果在Spring MVC中交换@service和@repository批注会发生什么


问题内容

为什么我们需要@service在服务实现内部和@repositoryDAO实现中使用。在Spring
MVC中互换@service@repository批注时,不会发生任何问题。


问题答案:

根据文件建立
@Repository@Service@Controller都是同义词。它们都只是@Component注释的专业化。因此,通常,它们可以被代替使用。但是…您不应该这样做。

第一个原因:任何此类注释 都清楚了 组件在应用程序中的作用。显示-该组件属于控制器,服务还是数据层。

第二个原因:某些注释由不同的Spring模块以不同的方式处理。例如,Spring Data JPA将处理@Repository,并将尝试用实现替换此注释所标记的任何接口。Spring也将自动异常转换应用于此类。另一个示例Spring Web MVCprocess @Controller和在URL映射中使用标记有它的类。

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

在Spring框架的未来版本中,@ Repository,@
Service和@Controller也可能带有其他语义。因此,如果在服务层使用@Component或@Service之间进行选择,则@Service显然是更好的选择。