@component @controller @repository @service
@Component is a generic stereotype for any Spring-managed component.
@Repository, @Service, and @Controller are specializations of @Component
for 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 @Controller can also carry additional semantics
in future releases of the Spring Framework. Thus, if you are choosing between
using @Component or @Service for your service layer, @Service is clearly the
better choice. Similarly, as stated earlier, @Repository is already supported
as a marker for automatic exception translation in your persistence layer.
see https://docs.spring.io/spring-framework/docs/2.5.x/javadoc-api/org/springframework/stereotype/Component.html