Java 如果我们在SpringMVC中交换@service和@repository注释,会发生什么
为什么我们需要在服务实现中使用Java 如果我们在SpringMVC中交换@service和@repository注释,会发生什么,java,spring,spring-mvc,annotations,Java,Spring,Spring Mvc,Annotations,为什么我们需要在服务实现中使用@service,在DAO实现中使用@repository。在spring MVC中交换@service和@repository注释时不会出现问题。这取决于框架其余部分使用的内容。理论上没有任何变化,因为@服务和@存储库注释基本上是@组件注释。对于@Controller或@Endpoint(对于SpringWS,还有更多)也可以这样说 然而,它们表达了类是什么(服务、存储库)的意图,并让用户清楚地知道该类属于哪一层 但是,如果您也使用Spring进行事务管理,那么@
@service
,在DAO实现中使用@repository
。在spring MVC中交换@service
和@repository
注释时不会出现问题。这取决于框架其余部分使用的内容。理论上没有任何变化,因为@服务
和@存储库
注释基本上是@组件
注释。对于@Controller
或@Endpoint
(对于SpringWS,还有更多)也可以这样说
然而,它们表达了类是什么(服务、存储库)的意图,并让用户清楚地知道该类属于哪一层
但是,如果您也使用Spring进行事务管理,那么@Repository
也是该类的触发器(另请参阅)
虽然没有什么东西需要打破,但它可能会在某个时候打破 根据@Repository
,@Service
,@Controller
都是同义词。它们都只是@组件
注释的专门化。因此,一般来说,它们可以一个代替另一个。但是你不应该这样做
第一个原因:这些注释中的任何一个都明确了组件在应用程序中的角色。显示-此组件是否属于控制器、服务或数据层
第二个原因:这些注释中的一些由不同的Spring模块进行不同的处理。例如,Spring数据JPA
将处理@Repository
,并尝试用实现替换此注释标记的任何接口。Spring还将对此类类应用自动异常转换。另一个例子:springwebmvc
处理@Controller
,并在URL映射中使用标有它的类
实际上,在未来的版本中,Spring的一些模块可以以特定的方式处理@Service
。不是那么简单的@组件
。这就是为什么文档建议:
@Repository、@Service和@Controller也可能
在Spring框架的未来版本中提供额外的语义。
因此,如果您选择使用@Component还是@Service来
您的服务层,@service显然是更好的选择
那可能会把你的交易搞砸。服务需要将需要传播的事务传递到DAO。两者都是组件,所以创建bean不会有问题。