μλ‘ μνΈμμ©νλ κ°μ²΄μλ λκ°μ§ μ’ λ₯μ μμ‘΄ κ΄κ³κ° μλ€. μ΄ λκ°μ§ μμ‘΄ κ΄κ³λ κ°ν κ²°ν© μ λμ¨ν κ²°ν©/ μ½ν κ²°ν©μ΄λ€.
public class Controller1 {
private final Service1 service1;
public Controller1() {
this.service1 = new Service1();
}
}
보μ΄λ κ²κ³Ό κ°μ΄ Controller1 κ°μ²΄λ μμ±λ λ Service1 κ°μ²΄λ₯Ό μΈμ€ν΄μ€νν΄μ μ¬μ©νλ€. μ¬κΈ°μ λ§μ½ Controller1 κ°μ²΄μ μ¬λ¬κ°μ§ λ©μλλ€μ΄ Servicee1 κ°μ²΄λ₯Ό μΈμ€ν΄μ€ν ν΄μ μ¬μ©νλ€λ©΄ μ½λμ μ€μ κΈΈμ΄μ§κ³ , Service1 κ°μ²΄μ λ³κ²½μ¬νμ΄ μκΈ°λ©΄ κ³ μ³μΌν λΆλΆλ λ§μ κ²μ΄λ€. λ μ μ μλ μ μ μ½λμ κ΅¬μ‘°λ‘ μΈν΄ Controller1 κ°μ²΄λ Service1 κ°μ²΄μ μμ‘΄μ νλ€λ κ²μ΄λ€.
μμ μν©μ κ·Ήλν μμΌμ κ·Έλ¦° λ€μ΄μ΄κ·Έλ¨μ 보μ¬μ£Όκ² λ€.

Class Controller1 {
private final Service1 service1;
// service1 κ°μ²΄ μ¬μ©
public Controller1(Service1 service1) {
this.service1 = service1;
}
}
보μ΄λ κ²κ³Ό κ°μ΄ μμμλ λ€λ₯΄κ² Controller1 κ°μ²΄λ μμ±λ λ Servicee1 κ°μ²΄λ₯Ό μ£Όμ
λ°μ μ¬μ©νλ€. μ΄λ κ² λλ©΄, κ°ν κ²°ν©μ λΉν΄ μ½λμ κΈΈμ΄λ μ€κ³ , Service1 κ°μ²΄μ λ³κ²½μ¬νμ΄ μκΈ°λλΌλ, Controller1 κ°μ²΄μμλ λ³κ²½μ¬νμ΄ μλ€λ κ²μ΄λ€. λν, μμ λ°λλ‘ Controller1 κ°μ²΄λ Service1 κ°μ²΄μ μμ‘΄μ νμ§ μλλ€λ κ²μ΄λ€.
μ΄ μν©μ μ 리ν λ€μ΄μ΄κ·Έλ¨μ 보μ¬μ£Όκ² λ€.

μ΄λ κ² μν©μ΄ λ€λ°λκ²μ μμ‘΄μ ν΄μΌνλ κ°μ²΄λ₯Ό μ£Όμ
λ°λ κ²μ μμ‘΄μ± μ£Όμ
λλ DIλΌ νκ³ , νλ‘κ·Έλ¨μ μ μ΄μ νλ¦μ΄ λ°λ κ²μ μ μ΄μ μμ λλ IoCλΌ νλ€.
μμμ μΈκΈν Di ( Dependency Injection ) νΉμ μμ‘΄μ± μ£Όμ
μ μ½κ² λ§νμλ©΄ μ©λμ λ§κ² νμν κ°μ²΄λ₯Ό κ·Έλ₯ κ°μ Έλ€ μ¬μ©νλ κ²μ΄λ€. μ΄ κ°μ²΄λ€μ΄ μ΄λ»κ² λ§λ€μ΄μ‘λμ§λ μ νμκ° μλ κ²μ΄λ€. μλ₯Ό λ€μ΄ μ°λ¦¬κ° μ¬λ¬κ°μ§ μ’
λ₯μ μ·μ μ
λ κ²κ³Ό κ°μ΄, νμν λ κ°μ Έλ€κ° μ¬μ©νλ κ²μ΄λ€.
κ·ΈλΌ μ¬κΈ°μ μκ°λλ μ§λ¬Έμ κ°μ²΄λ₯Ό μ¬μ©νλ €λ©΄ κ°μ²΄ μμ±μ΄ μ°μ λμ΄μΌ νλλ°, μ΄λ»κ² κ°μ²΄ μμ± μμ΄ κ°μ²΄λ₯Ό μ¬μ©ν μ μλ κ²μ΄λ€. κ·Έκ²μ λ°λ‘ μ€νλ§ νλ μμν¬κ° νμν κ°μ²΄λ₯Ό μμ±νμ¬ κ΄λ¦¬νλ μν μ λμ ν΄μ€λ€.μ¬κΈ°μ Bean κ³Ό IoC 컨ν
μ΄λλΌλ κ°λ
μ΄ λ±μ₯νλ€.
Bean = μ€νλ§μ΄ κ΄λ¦¬νλ κ°μ²΄μ΄λ€.
μ€νλ§ IoC 컨ν
μ΄λ = Bean μ λͺ¨μλ ν΅μ΄λ€.
- Bean λ±λ‘ λ°©μ
- ν΄λμ€ μμ @Component μ΄λ Έν μ΄μ μ μ΄μ£ΌκΈ°!
@Component public class ProductService { ... }μ λ κ² μ μ΄μ£Όλ©΄ μ€νλ§ μλ²κ° λ λ μ€νλ§ IoC 컨ν μ΄λμ Beanμ μμ±ν΄μ€λ€
// 1. ProductService κ°μ²΄ μμ± ProductService productService = new ProductService(); // 2. μ€νλ§ IoC 컨ν μ΄λμ λΉ (productService) μ μ₯ // productService -> μ€νλ§ IoC 컨ν μ΄λμ΄λ μ μ₯λλ Beanμ μ΄λ¦μ ν΄λμ€ μ΄λ¦μ 첫κΈμλ₯Ό μλ¬Έμλ‘ λ³κ²½νμ¬ μ μ₯νλ€.
λ°μ μ¬μ§μ²λΌ ν΄λμ€ μμ μ»€νΌ μ½© μμ΄μ½μ΄ μμΌλ©΄ κ·Έ ν΄λμ€λ 'bean' ν΄λμ€λΌλ λ»μ΄λ€.
μ΄ @Component μ΄λ Έν μ΄μ μ μ μ© λ²μλ @ComponentScan μ μ€μ ν΄ μ€ packages μμΉμ νμ packages λ€μ΄λ€.
2. μ§μ κ°μ²΄λ₯Ό μμ±ν λ€ μμ @Bean μ΄λ Έν μ΄μ μ μ΄μ£ΌκΈ°!... @Configuration public class BeanConfiguration { @Bean public ProductRepository productRepository() { String dbUrl = "jdbc:h2:mem:db"; String username = "sa"; String password = ""; return new ProductRepository(dbUrl, username, password); } }μ΄κ²λ μ μ₯ λ°©λ²μ μμ μ ν λ°©μκ³Ό κ°λ€.
- μ€νλ§ 'Bean' μ¬μ© λ°©λ²
- λ©€λ²λ³μ μ μΈ μμ @Autowired μ μ΄μ£ΌκΈ°!
@Component public class MyController { private final MyService myService; @Autowired public MyController(MyService myService) { this.myService = myService; } // ... }μ΄λ κ² μ μΌλ©΄ μ€νλ§μ μν΄ μλμ μΌλ‘ DI λλ€. νμ§λ§ Spring 4.3 λ²μ Ό λΆν° @Autowired μλ΅ κ°λ₯νλ€! λ¨, μμ±μ μ μΈμ΄ 1κ° μΌ λλ§μ΄λ€. λν, Lombokμ @RequiredArgsConstructor κ° final λ‘ μ μΈλ λ©€λ² λ³μλ₯Ό μλμΌλ‘ μμ±ν΄μ£ΌκΈ° λλ¬Έμ μ΄λ κ² μλ΅μ΄ κ°λ₯νλ€.
@RestController @RequiredArgsConstructor // finalλ‘ μ μΈλ λ©€λ² λ³μλ₯Ό μλμΌλ‘ μμ± public class MyController { private final MyService myService; // @Autowired // public ProductController(ProductService productService) { // this.productService = productService; // } }
"Coffee Bean" β
'23.04.17 - '23.04.22