Spring注解@Repository和@Service


71

使用@Repository@Service有什么优点?

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

如果我不使用它会怎样?我会想念什么?

Answers:


73

有几个原因:

  1. 使用更具体的注释来定位切入点更容易。千万不能小看这个用处!
  2. @Repository注释与它携带了一些附加功能:它会导致异常被包裹起来作为DataAccessException小号
  3. @Service注释可能获得额外的语义在未来,但它没有发生过......

是DataAccessException还是PersistenceException?
veer7'4

@ veer7 DataAccessException,就像文档所说的那样。你为什么要问?
Donal Fellows 2014年

65

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

使用@Repository@Serviceover的主要优点@Component是,可以很容易地编写一个AOP切入点,该切入点的目标是,所有带有注释的类@Repository

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



5

我相信Spring在添加这些Component注释时要记住两件事。

  1. 它们可用于在所有用该子组件注释的对象上指定切点。(所有@Repository或所有@Service切入点)
  2. 我认为Spring还提到他们会在将来增加一些功能。(对此我没有引文,我只是认为我在某处读过)

3

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

例如,您可以直接在@Controller中实现功能,但是在这种情况下,测试将更加困难,并且您需要定义所有模拟元素(在springframework 3.1中非常容易,但仍然是“不良设计”)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.