开发者

Spring annotations @Repository and @Service

What are the advantages of using @Repository and @Service?

Don't tell me about component scanning etc., I am looking forward to something extra benefits or feature开发者_高级运维s that are there if at all.

what happens if I don't use it? what is that I would be missing?


There are a few reasons:

  1. It's easier to target pointcuts with more specific annotations. Do not underestimate the usefulness of this!
  2. The @Repository annotation carries with it some additional functionality: it causes exceptions to be wrapped up as DataAccessExceptions.
  3. The @Service annotation may gain additional semantics in the future but it's not happened yet…


The @Repository annotation (introduced in Spring 2.0) and @Service annotation (introduced in Spring 2.5) are specialization of the @Component annotation.

The main advantage of using @Repository or @Service over @Component is that it's easy to write an AOP pointcut that targets, for instance, all classes annotated with @Repository.

Also, the specialized annotations help to clearly demarcate application layers (in a standard 3 tiers application).


I believe that there are two things Spring had in mind when they added these Component annotations.

  1. They can be used to specify point cuts across all objects annotated with that sub-component. (All @Repository or all @Service pointcuts)
  2. I think Spring also mentioned that they would be adding some future functionality to them. (I have no citation for this, I just think I read this somewhere)


If you TDD it would be useful to carefully design (an test of course) @Services because they will benefit of full injection of all the @Autowired components you have defined.

You could implement your functionalities directly into a @Controller for example, but in this case testing will be harder and you need to define all the mock elements (quite easier in springframework 3.1 but still "bad design").

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜