# Stereotypes

*   #### @Component - Todas as classes são Component. Essa é uma anotação mais genérica;



```java
@Component
public class Product {

 private String name;
 private BigDecimal value;

 //... getters and setters
}
```

*   #### @Repository - Classe onde terá lógicas de negócio do banco de dados (transações). Métodos com contato direto com o banco de dados.;



```java
@Repository
public class ProductRepository {
 // database transaction methods
}
```

*   #### @Service - Classe de serviço, onde envolve regras e lógicas de negócio. Aqui, faremos validações (email de confirmação, por exemplo);



```java
@Service
public class ProductService {
 // business rules
}
```

*   #### @Controller - Utilizada quando utilizamos uma aplicação que envolve camadas MVC (model view controller);



```java
@Controller
public class ProductController {
 // ... GET, POST, DELETE, UPDATE methods
}
```

* #### @RestController - Para API Rest. Se teremos somente endpoints, expondo a API na Web, utilizamos este.
