π[Spring] μμ‘΄κ΄κ³ μ£Όμ μ λ Έν μ΄μ (@Inject, @Autwired, @Resource) λν΄μβ¦
μμ‘΄κ΄κ³λ?
μμ‘΄κ΄κ³
λ Aκ° Bμ μμ‘΄νκ³ μλ€ λΌκ³ νμ λ, Bκ° λ³νλ©΄ Aμ μν₯μ λ―ΈμΉλ κ΄κ³λ₯Ό μλ―Ένλ€.
μλ₯Ό λ€λ©΄ 건물(A)μ μ€κ³λ(B)μ μμ‘΄νλ€
κ³ ν μ μλ€.
μ€κ³λκ° λ³κ²½λλ€λ©΄ 건물 ꡬ쑰μ λΆλͺ
ν μν₯μ λ―ΈμΉλ€.
μμ μν©μ μ½λλ‘ λνλ΄λ³΄λ©΄ μλμ κ°λ€.
public class Structur {
private BluePrint bluePrint;
public Structur() {
this.bluePrint = new Structur();
}
}
μ΄λ¬ν μ½λλ λͺ κ°μ§ λ¬Έμ μ μ΄ μλ€.
- λ ν΄λμ€ κ°μ κ²°ν©λκ° λλ€.
Blueprint
μStructur
ν΄λμ€λ μλ‘ κ°νκ² κ²°ν©λμ΄ μλ€.
Blueprintκ° μλ‘κ² λ³νλ€λ©΄ Structur ν΄λμ€μ μμ±μλ λ³κ²½λμ΄μΌνλ€.
μ΄λ κ² λ§€λ² μμ±μκ° λ°λλ μμ μ΄ λμνλ€λ©΄ μ μ°μ±μ΄ λ¨μ΄μ§λ€. - κ°μ²΄λ€ κ°μ κ΄κ³κ° μλ ν΄λμ€ κ°μ κ΄κ³κ° λ§Ίμ΄μ§λ€.
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ° μμΉ(SOLID) 5μμΉ
μΈμΈν°νμ΄μ€μ μμ‘΄
μ μλ°°νλ€.
Structurν΄λμ€λ BluePrintν΄λμ€μ μμ‘΄νκ³ μλ€.
μ΄λ¬ν λ¬Έμ μ λ€μ ν΄κ²°νλ κ²μ΄ μμ‘΄κ΄κ³ μ£Όμ (Dpendency Injection)μ΄λ€.
μμ‘΄κ΄κ³ μ£Όμ (DI)
μμ‘΄κ΄κ³ μ£Όμ
(DI)
μ΄λ μΈλΆμμ μμ‘΄κ΄κ³λ₯Ό μ€μ ν΄μ£Όλ κ²μ λ§νλ€.
μ€νλ§μμλ DIλ₯Ό λ΄λΉνλ DI 컨ν
μ΄λ
κ° μ‘΄μ¬νλ€.
μ΄ μ»¨ν
μ΄λκ° κ°μ²΄λ€ κ°μ μμ‘΄κ΄κ³λ₯Ό μ£Όμ
ν΄μ€λ€.
μ€νλ§μμ μμ‘΄κ΄κ³λ₯Ό μ£Όμ
ν΄μ£Όλ λ°©λ²μ 3κ°μ§κ° μλ€.
- μμ±μ μ£Όμ
- μ€μ μ(setter) μ£Όμ
- νλ μ£Όμ
https://hellojunho.github.io/spring/Spring-DI-%EC%84%A4%EC%A0%95%EB%B0%A9%EC%8B%9D/
μμ‘΄κ΄κ³ μ£Όμ μ λ Έν μ΄μ
μμ‘΄κ΄κ³ μ£Όμ
μ λ
Έν
μ΄μ
μ @Autowired
, @Inject
, @Resource
κ° μλ€.
@Autowired
@Autowired
λ λ³μ μμ μ€μ ν΄ ν΄λΉ νμ
μ κ°μ²΄λ₯Ό μ°Ύμ μλμΌλ‘ μμ‘΄κ΄κ³λ₯Ό μ£Όμ
νλ€.
μ€νλ§ νλ μμν¬μμ μ 곡νλ κΈ°λ₯μ΄λ€.
@Inject
@Inject
λ @Autowiredμ κ°μ§λ§, νλ μμν¬μμ μ 곡νλ κΈ°λ₯μ΄ μλλΌ μλ°μμ μ§μνλ κΈ°λ₯μΌλ‘ νλ μμν¬μ μ’
μμ μ΄μ§ μλ€.
@Resource
@Resource
λ ν΄λΉ νμ
μ κ°μ²΄λ₯Ό μ°Ύμ μλμΌλ‘ ν λΉνκ³ , κ°μ²΄λ₯Ό μ΄μ©ν΄ μμ‘΄μ±μ μ£Όμ
ν λ μ¬μ©νλ€. (@Autowired + @Qualifier)
μλ°μμ μ§μνλ κΈ°λ₯μΌλ‘, νλ μμν¬μ μ’
μμ μ΄μ§ μλ€.
λκΈλ¨κΈ°κΈ°