Spring @Service and @Component – the difference, my difference

According to this topic on stackoverflow, programmers (including me) often wonder about responsibilities of classes annotated with @Service and @Component. What we can find in Spring documentation:

@Component is a generic stereotype for any Spring-managed component. @Repository, @Service, and @Controller are specializations of @Component for more specific use cases

so, there isn’t any specific responsibility for @Component annotation in Spring – in my understanding.

If this isn’t specified – why not to create our own definition?

Let’s start: when we try to imagine @Component and @Service as a something touchable – what will be bigger?

right – @Component!


My definitions of @Service and @Component are:

@Service should be a class of service layer (service layer pattern). contain only @Repositories – for lower complexity,
@Component should be something like group for @Services. It should contains @Services, @Repositories or other @Components.


My definition of @Component is on the way with `composition over inheritance`.
There is also another advantage – but this will be mentioned in separate post.