π λΉ μ€μ½ν
κΈ°λ³Έμ μΌλ‘ μ€νλ§ λΉμ μ€νλ§ μ»¨ν μ΄λ μμ μ ν¨κ» μμ±λμ΄ μ»¨ν μ΄λκ° μ’ λ£λ λκΉμ§ μ μ§λλ€. μ΄κ²μ μ€νλ§ λΉμ΄ κΈ°λ³Έμ μΌλ‘ μ±κΈν€ μ€μ½νλ‘ μμ±λκΈ° λλ¬Έμ΄λ€. μ€μ½νλ λΉμ΄ μ‘΄μ¬ν μ μλ λ²μλ₯Ό λ»νλ€.
- μ±κΈν€ : κΈ°λ³Έ μ€μ½ν, 컨ν μ΄λμ μμκ³Ό μ’ λ£κΉμ§ μ μ§λλ κ°μ₯ λμ λ²μμ μ€μ½νμ΄λ€.
- νλ‘ν νμ : μ€νλ§ μ»¨ν μ΄λλ νλ‘ν νμ λΉμ μμ±κ³Ό μμ‘΄κ΄κ³ μ£Όμ κΉμ§λ§ κ΄μ¬νκ³ λλ κ΄λ¦¬νμ§ μλ λ§€μ° μ§§μ λ²μμ μ€μ½ν
- μΉ κ΄λ ¨ μ€μ½ν
- request : μΉ μμ²μ΄ λ€μ΄μ€κ³ λκ°λκΉμ§ μ μ§λλ μ€μ½ν
- session : μΉ μΈμ μ΄ μμ±λκ³ μ’ λ£λ λκΉμ§ μ μ§λλ μ€μ½ν
- application : μΉμ μλΈλ¦Ώ 컨ν μ€νΈμ κ°μ λ²μλ‘ μ μ§λλ μ€μ½ν
→ μ€μ½νλ ν΄λμ€μ @Scope("prototype")κ³Ό κ°μ΄ μ λ Έν μ΄μ μ λΆμ¬μ£Όμ΄ μ§μ ν μ μλ€.
π νλ‘ν νμ μ€μ½ν
- μ±κΈν€ μ€μ½νμ λΉμ μ‘°ννλ©΄ νμ κ°μ μΈμ€ν΄μ€μ μ€νλ§ λΉμ΄ λ°νλλ€.
- νλ‘ν νμ μ€μ½ν λΉμ μ‘°ννλ©΄ νμ μλ‘μ΄ μΈμ€ν΄μ€κ° λ°νλλ€.
→ μ€νλ§ μ»¨ν μ΄λλ νλ‘ν νμ λΉμ μμ±νκ³ μμ‘΄κ΄κ³ μ£Όμ , μ΄κΈ°νκΉμ§λ§ μ²λ¦¬νλ€. λΉμ λ°νν νμ μ€νλ§ μ»¨ν μ΄λλ λ μ΄μ νλ‘ν νμ λΉμ κ΄λ¦¬νμ§ μλλ€. νλ‘ν νμ λΉμ κ΄λ¦¬ν μ± μμ ν΄λΌμ΄μΈνΈμκ² μλ€. κ·Έλμ @PreDestroy κ°μ μ’ λ£ λ©μλκ° νΈμΆλμ§ μλλ€. λ°λΌμ ν΄λΌμ΄μΈνΈκ° μ§μ μ’ λ£ λ©μλλ₯Ό νΈμΆν΄μ£Όμ΄μΌ νλ€.
π νλ‘ν νμ λΉκ³Ό μ±κΈν€ λΉμ ν¨κ» μ¬μ©ν λ λ¬Έμ μ
- clientBeanμ΄λΌλ μ±κΈν€ λΉμ μμ‘΄κ΄κ³ μ£Όμ μ ν΅ν΄ νλ‘ν νμ λΉμ μ£Όμ λ°μ μ¬μ©νλ€.
- clientBeanμ λ³΄ν΅ μ€νλ§ μ»¨ν μ΄λ μμ± μμ μ ν¨κ» μμ±λκ³ μμ‘΄κ΄κ³ μ£Όμ λ λ°μνλ€.
- μ£Όμ μμ μ μ€νλ§ μ»¨ν μ΄λμ νλ‘ν νμ λΉμ μμ²νκ³ λ°ν λ°μ νλ‘ν νμ λΉμ λ΄λΆ νλμ 보κ΄νλ€.
- μ΄μ clientBeanμ΄ λ³΄κ΄νκ³ μλ νλ‘ν νμ λΉμ κ°μ Έμ€λ©΄ μ€νλ§ μ»¨ν μ΄λκ° λ°ννλ κ²μ΄ μλλΌ μ±κΈν€ λΉ μμ± μμ μ μ£Όμ λ νλ‘ν νμ λΉμ κ°μ Έμ€λ κ²μ΄κΈ° λλ¬Έμ μλ‘ μμ±λμ§ μκ³ κ°μ μΈμ€ν΄μ€κ° λ°νλλ€.
→ νμ§λ§ μ°λ¦¬κ° μνλ κ²μ νΈμΆν λλ§λ€ νλ‘ν νμ λΉμ΄ μλ‘ μμ±λλ κ²μ΄λ€.
π νλ‘ν νμ λΉκ³Ό μ±κΈν€ λΉμ ν¨κ» μ¬μ©ν λ λ¬Έμ ν΄κ²°
κ°μ₯ μ¬μ΄ λ°©λ²μ μ±κΈν€ λΉμ΄ νλ‘ν νμ λΉμ μ¬μ©ν λλ§λ€ μ€νλ§ μ»¨ν μ΄λμ μλ‘ μμ²νλ κ²μ΄λ€.
static class ClientBean {
@Autowired
private ApplicationContext ac;
public int logic() {
PrototypeBean prototypeBean = ac.getBean(PrototypeBean.class);
prototypeBean.addCount();
int count = prototypeBean.getCount();
return count;
}
...
}
- μ΄λ κ² μμ‘΄κ΄κ³λ₯Ό μΈλΆμμ μ£Όμ λ°λκ² μλλΌ νμν μμ‘΄κ΄κ³λ₯Ό μ§μ μ°Ύλ κ²μ Dependency Lookup(DL)μ΄λΌκ³ νλ€.
- νμ§λ§ μ΄λ κ² μ€νλ§ μ»¨ν μ΄λ μ 체λ₯Ό μ£Όμ λ°κ² λλ©΄ μ€νλ§ μ»¨ν μ΄λμ μ’ μμ μΈ μ½λκ° λκ³ , λ¨μ ν μ€νΈλ μ΄λ €μμ§λ€.
β ObjectProvider
@Autowired
private ObjectProvider<PrototypeBean> prototypeBeanProvider;
public int logic() {
PrototypeBean prototypeBean = prototypeBeanProvider.getObject();
prototypeBean.addCount();
int count = prototypeBean.getCount();
return count;
}
- ObjectProviderλ μ§μ ν λΉμ 컨ν μ΄λμμ μ°Ύμμ£Όλ λμ DL μλΉμ€λ₯Ό μ 곡νλ€.
- prototypeBeanProvider.getObject()λ₯Ό ν΅ν΄ νμ μλ‘μ΄ νλ‘ν νμ λΉμ΄ μμ±λλ€.
- μ€νλ§μ΄ μ 곡νλ κΈ°λ₯μ μ¬μ©νμ§λ§ (μ€νλ§μ μμ‘΄), κΈ°λ₯μ΄ λ¨μνλ―λ‘ λ¨μν μ€νΈλ₯Ό λ§λ€κ±°λ mock μ½λλ₯Ό λ§λ€κΈ°λ ν¨μ¬ μ¬μμ§λ€.
β JSR-330 Provider
//implementation 'javax.inject:javax.inject:1' gradle μΆκ° νμ
@Autowired
private Provider<PrototypeBean> provider;
public int logic() {
PrototypeBean prototypeBean = provider.get();
prototypeBean.addCount();
int count = prototypeBean.getCount();
return count;
}
- μλ° νμ€ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ λ°©λ²μ΄λ€.
- get() λ©μλ νλλ₯Ό μ 곡νμ¬ κΈ°λ₯μ΄ λ§€μ° λ¨μνλ€.
- κΈ°λ₯μ΄ λ¨μνλ―λ‘ λ¨μν μ€νΈλ₯Ό λ§λ€κ±°λ mock μ½λλ₯Ό λ§λ€κΈ° μ½λ€.
- λ³λμ λΌμ΄λΈλ¬λ¦¬κ° νμνλ€.
- μλ° νμ€μ΄λ―λ‘ μ€νλ§μ΄ μλ λ€λ₯Έ 컨ν μ΄λμμλ μ¬μ©ν μ μλ€.
π μ 리
- λ§€λ² μ¬μ©ν λλ§λ€ μμ‘΄κ΄κ³ μ£Όμ μ΄ μλ£λ μλ‘μ΄ κ°μ²΄κ° νμν λ μ¬μ©
- μ€λ¬΄μμλ μ±κΈν€ λΉμΌλ‘ λλΆλΆμ λ¬Έμ λ₯Ό ν΄κ²°ν μ μκΈ° λλ¬Έμ νλ‘ν νμ λΉμ μ§μ μ μΌλ‘ μ¬μ©νλ μΌμ λ§€μ° λλ¬Όλ€.
- ObjectProvider, JSR330 Provider λ±μ νλ‘ν νμ λΏλ§ μλλΌ DLμ΄ νμν κ²½μ°λ μΈμ λ μ§ μ¬μ©ν μ μλ€.
π μΉ μ€μ½ν
- μΉ νκ²½μμλ§ λμ
- νλ‘ν νμ κ³Ό λ€λ₯΄κ² ν΄λΉ μ€μ½νμ μ’ λ£ μμ κΉμ§ κ΄λ¦¬ν¨. λ°λΌμ μ’ λ£ λ©μλ νΈμΆ
- request μ€μ½ν λΉμ HTTP μμ² λΉ νλμ© μμ±λκ³ , μμ²μ΄ λλλ μμ μ μλ©Έλ¨
- @Scope(value = "request")λ‘ μ§μ
π νλ‘μ λ°©μ μ¬μ©νκΈ°
- @Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
- μ€νλ§ μ»¨ν μ΄λλ CGLIBλΌλ λ°μ΄νΈμ½λ μ‘°μνλ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν΄ MyLoggerλ₯Ό μμλ°μ κ°μ§ νλ‘μ κ°μ²΄λ₯Ό μμ±νλ€.
- μ€νλ§ μ»¨ν μ΄λμλ νλ‘μ κ°μ²΄κ° λ±λ‘λκ³ , μμ²(request)μ΄ μ€λ©΄ κ·Έλ μ§μ§ λΉμ μμ²νλ μμ λ‘μ§μ΄ λ€μ΄μλ€.
- ν΄λΌμ΄μΈνΈκ° logic() λ©μλλ₯Ό νΈμΆν λλ νλ‘μ κ°μ²΄μ λ©μλλ₯Ό νΈμΆνκ³ νλ‘μ κ°μ²΄λ request μ€μ½νμ μ§μ§ λ©μλλ₯Ό νΈμΆνλ€.
β νΉμ§
- ν΅μ¬ μμ΄λμ΄λ μ§μ§ κ°μ²΄ μ‘°νλ₯Ό κΌ νμν μμ κΉμ§ μ§μ°μ²λ¦¬ ν μ μλ€λ κ²μ΄λ€.
- λ¨μ§ μ λ Έν μ΄μ μ€μ λ³κ²½λ§μΌλ‘ μλ³Έ κ°μ²΄λ₯Ό νλ‘μ κ°μ²΄λ‘ λ체ν μ μλ€.
- 무λΆλ³νκ² μ¬μ©νλ©΄ μ μ§λ³΄μνκΈ° μ΄λ €μΈ μ μμΌλ κΌ νμν κ³³μμ μ΅μνν΄μ μ¬μ©νλ κ²μ΄ μ’λ€.
κ°μ λ§ν¬
μ€νλ§ ν΅μ¬ μ리 - κΈ°λ³ΈνΈ - μΈνλ° | κ°μ
μ€νλ§ μ λ¬Έμκ° μμ λ₯Ό λ§λ€μ΄κ°λ©΄μ μ€νλ§μ ν΅μ¬ μ리λ₯Ό μ΄ν΄νκ³ , μ€νλ§ κΈ°λ³ΈκΈ°λ₯Ό νμ€ν λ€μ§ μ μμ΅λλ€., - κ°μ μκ° | μΈνλ°...
www.inflearn.com
'Spring' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Spring] MVC 1νΈ (1) - μΉ μ ν리μΌμ΄μ μ΄ν΄ (0) | 2022.03.28 |
---|---|
[Spring] ν΅μ¬ μ리 κΈ°λ³Έ (8) - λΉ μλͺ μ£ΌκΈ° μ½λ°± (0) | 2022.03.14 |
[Spring] ν΅μ¬ μ리 κΈ°λ³Έ (7) - μμ‘΄ κ΄κ³ μλ μ£Όμ (0) | 2022.03.13 |