From Spring Documentation:
The
@Repositoryannotation is a marker for any class that fulfils the
role or stereotype of a repository (also known as Data Access Object
or DAO). Among the uses of this marker is the automatic translation of
exceptions, as described in Exception Translation.Spring provides further stereotype annotations:
@Component,@Service,
and@Controller.@Componentis a generic stereotype for any
Spring-managed component.@Repository,@Service, and@Controllerare
specializations of@Componentfor more specific use cases (in the
persistence, service, and presentation layers, respectively).
Therefore, you can annotate your component classes with@Component,
but, by annotating them with@Repository,@Service, or@Controller
instead, your classes are more properly suited for processing by tools
or associating with aspects.For example, these stereotype annotations
make ideal targets for pointcuts.@Repository,@Service, and
@Controllercan also carry additional semantics in future releases of
the Spring Framework. Thus, if you are choosing between using
@Componentor@Servicefor your service layer,@Serviceis clearly the
better choice. Similarly, as stated earlier,@Repositoryis already
supported as a marker for automatic exception translation in your
persistence layer.
| Annotation | Meaning |
|---|---|
@Component |
generic stereotype for any Spring-managed component |
@Repository |
stereotype for persistence layer |
@Service |
stereotype for service layer |
@Controller |
stereotype for presentation layer (spring-mvc) |