如果在Spring MVC中交换@service和@repository批注会发生什么
问题内容:
为什么我们需要@service
在服务实现内部和@repository
DAO实现中使用。在Spring
MVC中互换@service
和@repository
批注时,不会发生任何问题。
问题答案:
根据文件建立
@Repository
,@Service
,@Controller
都是同义词。它们都只是@Component
注释的专业化。因此,通常,它们可以被代替使用。但是…您不应该这样做。
第一个原因:任何此类注释 都清楚了 组件在应用程序中的作用。显示-该组件属于控制器,服务还是数据层。
第二个原因:某些注释由不同的Spring模块以不同的方式处理。例如,Spring Data JPA
将处理@Repository
,并将尝试用实现替换此注释所标记的任何接口。Spring也将自动异常转换应用于此类。另一个示例Spring Web MVC
process @Controller
和在URL映射中使用标记有它的类。
实际上,在将来的版本中,Spring的某些模块可能会@Service
以特定方式处理。没有那么简单@Component
。这就是为什么文档建议:
在Spring框架的未来版本中,@ Repository,@
Service和@Controller也可能带有其他语义。因此,如果在服务层使用@Component或@Service之间进行选择,则@Service显然是更好的选择。