Spring注解@Repository和@Service
使用@Repository和@Service有什么好处?
不要告诉我有关组件扫描等,我期待着一些额外的好处或function,如果有的话。
如果我不使用它会怎么样? 我会错过什么?
有几个原因:
- 使用更具体的注释来定位切入点更容易。 不要低估这个的用处!
-
@Repository
注解带有一些额外的function:它导致exception被包装为DataAccessException
。 -
@Service
注释可能会在未来获得额外的语义,但还没有发生。
@Repository
注解(在Spring 2.0中引入)和@Service
注解(在Spring 2.5中引入)是@Component
注解的特化。
使用@Repository
或@Service
over @Component
的主要优点是,编写一个AOP切入点是很容易的,例如,所有的切入点都是以@Repository
注解的。
此外,专门的注释有助于清楚地划分应用程序层(在标准的3层应用程序中)。
我相信Spring在添加这些Component注释时有两件事情。
- 它们可以用来指定用该子组件注释的所有对象的切点。 (所有@Repository或所有@Service切入点)
- 我认为Spring也提到他们会为他们添加一些未来的function。 (我没有为此引用,我只是觉得我读了这个地方)
如果你使用TDD ,仔细devise(当然是testing)@Services将是有用的,因为它们将有利于完全注入你所定义的所有@Autowired组件。
例如,你可以直接将你的function实现到一个@Controller中,但是在这种情况下,testing会比较困难,而且你需要定义所有的模拟元素(在springframework 3.1中比较容易,但是仍然是“糟糕的devise”)。
从数据库连接的angular度来看,使用@Repository
和@Service
注释是非常重要的。
对所有Web服务types的数据库连接使用@Service
对所有存储的proc数据库连接使用@Repository
如果不使用正确的注释,则可能会遇到由回滚事务覆盖的提交exception。 您将在压力负载testing中看到与回滚JDBC事务相关的exception。
Spring中@Repository构造型的好处
-
@Repository也是一个@Component,因此你可以使用组件扫描来自动检测你的@Repository注释bean,并将它们注册到ApplicationContext中。
-
将获得自动exception转换不仅仅是日志logging。
-
所有持久性exception的exception都被转换为一致的Spring DataAccessException层次结构,因此,只需处理1种exception,即使使用多个策略(通常将hibernate / jpa与纯jdbc混合使用)
-
无需configuration。
- Spring Boot JPA – configuration自动重新连接
- 如何在Spring中自动assemblygenerics<T>的bean?
- Spring中的BeanPostProcessor和init / destroy方法有什么区别?
- @RequestParam vs @PathVariable
- 我应该为业务层使用EJB3还是Spring?
- 我可以在哪里下载Spring Framework jars而不使用Maven?
- spring @Controller和@RestController注释的区别
- 当要发送的请求是多部分请求时,Spring CSRF令牌不起作用
- 只从Spring MVC 3控制器返回string消息