Spring 注释@Repository 和@Service

使用 @ Repository@ 服务的优点是什么?

不要告诉我关于组件扫描等,我期待着一些额外的好处或功能,如果有的话。

如果我不用它会怎样? 我会错过什么?

46260 次浏览

@Repository注释(在 Spring 2.0中引入)和 @Service注释(在 Spring 2.5中引入)是 @Component注释的专门化。

@Component上使用 @Repository@Service的主要优点是,很容易编写一个 AOP 切入点,该切入点的目标是所有用 @Repository注释的类。

此外,专门的注释有助于清楚地划分应用程序层(在标准的3层应用程序中)。

我相信 Spring 在添加这些组件注释时考虑到了两点。

  1. 它们可以用来指定用该子组件注释的所有对象的切点。(All@Repository 或 All@Service 切入点)
  2. 我想 Spring 也提到了他们将会在未来增加一些功能。(我没有这方面的引证,我只是觉得我在哪里读到过这个)

有几个原因:

  1. 使用更具体的注释来定位切入点更容易!
  2. @Repository注释带有一些附加功能: 它导致异常为 包装成 DataAccessException
  3. @Service注释 可能在未来获得额外的语义但它还没有发生..。

如果您是 TDD,那么仔细设计(当然是测试)@Services 将是有用的,因为它们将受益于您定义的所有@Autowired 组件的完全注入。

例如,您可以将您的功能直接实现到@Controller 中,但是在这种情况下,测试将更加困难,并且您需要定义所有的 mock 元素(在 Spring 框架3.1中相当容易,但仍然是“糟糕的设计”)。