Spring注释@Repository和@Service

时间:2011-06-06 18:22:10

标签: spring

使用@Repository@Service有什么好处?

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

如果我不使用它会发生什么?我会失踪的是什么?

4 个答案:

答案 0 :(得分:72)

有几个原因:

  1. 使用更具体的注释定位切入点更容易。 低估了这个的用处!
  2. @Repository注释带有一些额外的功能:它会导致例外为wrapped up as DataAccessExceptions
  3. @Service注释may gain additional semantics in the future但尚未发生......

答案 1 :(得分:65)

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

使用@Repository@Service优于@Component的主要优点是,编写AOP切入点很容易,例如,所有使用@Repository注释的类都会定位。

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

答案 2 :(得分:5)

我相信Spring在添加这些组件注释时会想到两件事。

  1. 它们可用于指定使用该子组件注释的所有对象的点切割。 (所有@Repository或所有@Service切入点)
  2. 我认为Spring还提到他们将为他们添加一些未来的功能。 (我没有引用这个,我只是觉得我在某个地方读过这个)

答案 3 :(得分:3)

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

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