What is @Component, @Bean, @Repository, @Controller. Explain difference between them

What is @Component, @Bean, @Repository, and @Controller? Explain the difference between them.

πŸ“Œ Need

Understanding the roles of @Component, @Bean, @Repository, and @Controller annotations in Spring is essential for correctly configuring and managing Spring beans in an application.

πŸ” What is it?

  1. @Component
  2. What it is: A generic stereotype annotation indicating that a class is a Spring-managed component.
  3. How it works: Marks a class as a Spring component, making it eligible for component scanning and automatic bean creation.
  4. Example:

java @Component public class MyComponent { // Business logic }
5. Simple Analogy: Like a general-purpose worker in a factory.
6. @Bean
7. What it is: A method-level annotation used to define a bean explicitly in a configuration class.
8. How it works: Marks a method in a @Configuration class as a bean producer. The method’s return value is registered as a bean in the Spring application context.
9. Example:

java @Configuration public class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); } }
10. Simple Analogy: Like a factory method that produces specific parts.
11. @Repository
12. What it is: A specialization of @Component used to indicate that a class is a Data Access Object (DAO).
13. How it works: Marks a class as a repository, which makes it eligible for Spring’s exception translation and other persistence-related behaviors.
14. Example:

java @Repository public class UserRepository { // Data access methods }
15. Simple Analogy: Like a data manager in a factory.
16. @Controller
17. What it is: A specialization of @Component used to indicate that a class is a web controller.
18. How it works: Marks a class as a controller in a Spring MVC application, handling HTTP requests and returning views or data.
19. Example:

java @Controller @RequestMapping("/users") public class UserController { @GetMapping("/{id}") public String getUser(@PathVariable Long id, Model model) { // Handle request } }
20. Simple Analogy: Like a customer service representative handling requests.

Differences

  • @Component vs. @Bean
  • @Component is used on the class level to indicate that the class is a Spring-managed component.
  • @Bean is used on the method level within a @Configuration class to explicitly define and configure beans.
  • @Component vs. @Repository
  • @Component is a general-purpose annotation for any Spring-managed component.
  • @Repository is a specialized annotation for DAOs, with additional persistence-related functionalities.
  • @Component vs. @Controller
  • @Component is a general-purpose stereotype for any Spring-managed bean.
  • @Controller is a specific type of @Component for web controllers in Spring MVC.
  • @Bean vs. @Repository
  • @Bean is used in configuration classes to define beans explicitly.
  • @Repository is a specialized @Component for data access objects, enabling exception translation.
  • @Controller vs. @Repository
  • @Controller handles web requests and returns views or data.
  • @Repository handles data access and persistence operations.

Summary

  • @Component: General-purpose Spring-managed component.
  • @Bean: Defines beans explicitly in configuration classes.
  • @Repository: Specialization of @Component for DAOs with persistence-related features.
  • @Controller: Specialization of @Component for handling web requests in Spring MVC.

Follow-up Questions

  1. Can you use @Component for web controllers instead of @Controller?
  2. Yes, but @Controller provides additional functionalities specific to handling web requests.
  3. What is the benefit of using @Repository over @Component?
  4. @Repository provides additional support for data access operations, such as exception translation.
  5. Can @Bean be used with non-@Configuration classes?
  6. No, @Bean methods must be in a class annotated with @Configuration.