Diferença entre @Component, @Repository e @Service no Spring Framework
Olá a todos! Sou um desenvolvedor Java iniciante, estudando Spring Framework. Estou escrevendo meu primeiro aplicativo — uma loja online simples. Tenho várias classes: ProductService, ProductRepository e ProductController. Sei que todas elas devem ser beans do Spring, mas não entendo qual anotação usar para qual classe.
Em todos os lugares escrevem que você pode simplesmente colocar @Component em tudo, mas vi que desenvolvedores experientes usam @Repository para a camada DAO e @Service para serviços. Qual é a diferença? Tentei escrever assim:
```java
@Component
public class ProductRepository {
public List findAll() {
// trabalho com o banco de dados aqui
}
}
@Service
public class ProductService {
@Autowired
private ProductRepository repository;
}
@Controller
public class ProductController {
@Autowired
private ProductService service;
}
```
Tudo funciona. Mas se eu substituir @Service por @Component — também funciona. E se substituir @Repository por @Component — também. Então por que