Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When should I use @Component instead of @Service? [closed]

I've already read about each Spring annotation in What's the difference between @Component, @Repository & @Service annotations in Spring?

I know that @Component and @Service do almost the same inside the Spring Framework. The difference it's bounded to it's usage, so I just use @Service into the service layer where I access my repositories.

I want to know what's the better way to choose @Component instead of @Service. Note that I'm using @Component now for a factory I've created, because the factory don't need to deal with repositories.

like image 604
R. Karlus Avatar asked Jan 18 '18 18:01

R. Karlus


People also ask

What happens if we use @component instead of service?

We can use @Component across the application to mark the beans as Spring's managed components. Spring will only pick up and register beans with @Component, and doesn't look for @Service and @Repository in general. @Service and @Repository are special cases of @Component.

When should I use @component?

@Component is an annotation that allows Spring to automatically detect our custom beans. In other words, without having to write any explicit code, Spring will: Scan our application for classes annotated with @Component. Instantiate them and inject any specified dependencies into them.

Can we replace @service annotation with @component annotation?

A Spring bean in the service layer should be annotated using @Service instead of @Component annotation and a spring bean in the persistence layer should be annotated with @Repository annotation.


1 Answers

Keep in mind that these are Spring stereotypes, and should be applied as stereotypes or assumptions around one's code are usually applied.

  • If your component is a generic component, not really living at the service layer, or is accessible but could hold state, then use @Component.
  • If your component is a specific service, living at the service layer, or is accessible and does not inherently hold state, use @Service.

Spring sees both of these ultimately as @Components.

like image 68
Makoto Avatar answered Nov 14 '22 22:11

Makoto