About the '@Component' annotation
Component, Controller, RestController, Service, Repository
1. @Component annotation is the Stereotype π©βπ»
Spring μμ IoC 컨ν
μ΄λμ μν΄ μ μ΄λλ Bean
μ΄λΌλ κ²μ λͺ
μνλ λ°©λ²μΌλ‘λ, @Bean
annotation μ λΆμ΄λ κ²κ³Ό
@Component
annotation μ λΆμ΄λ κ² λ κ°μ§ λ°©λ²μ΄ μλ€.
μ°μ @Component λ Class level μ λ±λ‘νλ©°, @Bean μ Method level μ λ±λ‘νλ€λ μ°¨μ΄μ μ΄ μλ€. μ¦,
@Component λ Java Class μ 1:1
κ΄κ³λ₯Ό κ°μ§λ§ @Bean μ 1:n
κ΄κ³λ₯Ό κ°μ§ μ μλ€.
κ·Έλ¦¬κ³ μ΄ @Component μ νμ κ΄κ³μλ @Controller
, @RestController
, @Service
, @Repository
annotation μ΄ μΆκ°λ‘ μ‘΄μ¬νλ€.
@Component λ μ΄λ€μ General-purpose Stereotype
annotation μΈ μ
μ΄λ€. λ°λΌμ @Component κ° ν μ
μλ κ²μ νμ annotation μμλ κ°λ₯νλ€λ μλ―Έκ° λλ€.
1. Controller
Presentation Layer
λ₯Ό μν΄ νΉνλ Component λ€. μ¦, API
λ₯Ό 컨νΈλ‘€νκΈ° μν΄ νΉλ³ν κΈ°λ₯μ΄ μΆκ°λ Component
μΈ μ
μ΄λ€. Dispatcher servlet
μΌλ‘λΆν° μμ²μ μμ νκ³ , @RequestMapping
annotation μ μ΄μ©ν΄ λΌμ°ν
νλ κ²μ
Component μ€ Controller annotation μΌλ‘ λ±λ‘λ Bean μμλ§ κ°λ₯ν νΉνλ κΈ°λ₯μ΄λ€.
κ·Έλ¦¬κ³ RESTful API
κ° μ£Όλ ν΅μ λ°©μμΌλ‘ μ리 μ‘μΌλ©΄μ Spring Boot μμ λ§μ΄ μ¬μ©νλ κ²μ΄ Controller μ RESTful API
λ₯Ό μν ν΅μ μμ λ§μ΄ μ¬μ©λλ @ResponseBody
annotation λ±μ μλμΌλ‘ μΆκ°νλλ‘ μ μν΄λμ κ²μ΄ @RestController
λ€.
2. Service
Service Layer
λ₯Ό μν΄ νΉνλ Component λ€. μ¦, μ±μ λΉμ¦λμ€ λ‘μ§μ λ€λ£¨κ³ μμμ μλ―Ένλ€. μ΄ annotation λ
Database νΈμΆμ ν μ μλ€κ³ νλ€. κ·Έλ¦¬κ³ λΉμ¦λμ€ λ‘μ§μ λ€λ£¨κ³ μμμ λͺ
μνλ κ² μΈμ μμ λ λ²¨μΈ @Component
annotation
κ³Ό ν° μ°¨μ΄λ μλ κ²μΌλ‘ νμΈλλ€.
Exception Handling μ νλ μΌλΆ κΈ°λ₯λ μλ€κ³ λ νμ§λ§ μ΄κ²μ AOP
λ λ¨μ μ½λμμΌλ‘ μΆ©λΆν λμ²΄κ° κ°λ₯ν λΆλΆμ΄λ€. μ€νλ €
μ΄μͺ½μ΄ μ½λλ₯Ό κ΄λ¦¬νκΈ°κ° λ μμνλ€. κ·ΈλΌμλ λ§μ κ°λ°μκ° @Service
annotation μΌλ‘ λͺ
μνλ κ² μ€ κ°μ₯ ν° μ΄μ λ
Service λΌλ annotation μ΄λ¦λ§ λ³΄κ³ λ μ΄ Class κ° μ± λ΄μμ μ΄λ€ κΈ°λ₯μ νλ Layer μ ν΄λΉνλμ§λ₯Ό μ¦κ° μμμ± μ
μκΈ° λλ¬ΈμΌλ‘ 보μΈλ€.
3. Repository
Presentation Layer
λ₯Ό μν΄ νΉνλ Component λ€. μ΄κ²μ΄ μ μΈλμλ€λ κ²μ μ΄ Class λ
DAO/Persistent/Data access layer μμ μλ―Ένλ€. κ·Έλ¦¬κ³ μ΄ annotation λ§μ΄ κ°λ νΉμ§μ
Automatic exception translation
μ μ§μνλ κ²μ΄λ€.
μ½κ² λ§ν΄ low-level exceptions
λ₯Ό high-level Spring exceptions
λ‘ λ°κΏ Database μ ν΅μ νλ©° λ°μν μ μλ
λ€μν μλ¬λ₯Ό Spring μ΄μ΄ν΄νκ³ κ΄λ¦¬ν μ μκ² ν΄μ€λ€.
Reference
- Prasad Thilakarathne. βWhat is the difference between @Component, @Repository, @Service, and @Controller annotations in Spring?.β Medium. Jul. 04, 2020, About Component Annotation.