🧁 [SPRING] | μ„Ήμ…˜3. 의쑴객체 - 의쑴객체 μžλ™ μ£Όμž…, 의쑴객체 선택

0
post-thumbnail
post-custom-banner
  1. 😏 제 생각을 적은 λ¬Έμž₯μ΄μ˜ˆμš”

  2. μΈν”„λŸ°μ‚¬μ΄νŠΈμ—μ„œ μΈν”„λŸ°κ°•μ‚¬λ‹˜μ˜ μžλ°” μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬(renew ver.) - μ‹ μž… ν”„λ‘œκ·Έλž˜λ¨Έλ₯Ό μœ„ν•œ κ°•μ’Œ κ°•μ˜μ˜ λ‚΄μš©μ„ μž‘μ„±ν–ˆμ–΄μš”. 사진과 글은 μ „λΆ€ 이 κ°•μ˜μ˜ λ‚΄μš©μ΄μ˜ˆμš”.

  3. 이 κ°•μ˜λŠ” μŠ€ν”„λ§4의 이둠을 μ•„μ£Ό 잘 μ„€λͺ…ν•΄μ£ΌλŠ” κ°•μ˜μž…λ‹ˆλ‹€. 이 κ°•μ˜ 덕뢄에 μŠ€ν”„λ§μ˜ 핡심 κ°œλ… DI , IOCλ₯Ό 이해할 수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. κ°•λ ₯μΆ”μ²œν•©λ‹ˆλ‹€.

κ°•μ˜ λ°”λ‘œ κ°€κΈ°





πŸ”Ή 의쑴객체 μžλ™ μ£Όμž…

μŠ€ν”„λ§μ— 객체λ₯Ό λ§Œλ“œλŠ 방법
xmlνŒŒμΌλ“±μ„ μ΄μš©ν•΄μ„œ μŠ€ν”„λ§μ»¨ν…Œμ΄λ„ˆμ— beanμ΄λΌλŠ” 객체λ₯Ό λ§Œλ“€μ–΄μ„œ μ‚¬μš©
거기에 λ§Œλ“€μ–΄μ§„ κ°μ²΄λŠ” μ„œλ‘œμ„œλ‘œ μ˜μ‘΄ν•΄μ„œ μ‚¬μš©λ˜μ–΄ 질 수 μžˆμ–΄μš”
<constructor-args> <property> νƒœκ·Έλ₯Ό μ΄μš©ν•˜μ—¬ 객체의 μ˜μ‘΄μ„€μ •μ„ ν–ˆμ–΄μš”.

μ˜μ‘΄κ°μ²΄κ°€ μžλ™μœΌλ‘œ μ£Όμž…λ˜κ²Œ ν•  수 μžˆμ–΄μš”.
κ°œλ°œμžκ°€ a객체가 b객체에 의쑴이 λœλ‹€κ³  의쑴 섀정을 μ•ˆν•΄λ„, μŠ€ν”„λ§μ»¨ν…Œμ΄λ„ˆκ°€ μžλ™μœΌλ‘œ μΈμ‹ν•΄μ„œ μ˜μ‘΄μ„€μ •μ„ ν•΄μ£ΌλŠ” κ²ƒμ΄μ˜ˆμš”.

의쑴객체 μžλ™ μ£Όμž…μ΄λž€,
μŠ€ν”„λ§ μ„€μ • νŒŒμΌμ—μ„œ 의쑴 객체λ₯Ό μ£Όμž…ν•  λ•Œ <constructor-arg> λ˜λŠ” <property> νƒœκ·Έλ‘œ 의쑴 λŒ€μƒ 객체λ₯Ό λͺ…μ‹œν•˜μ§€ μ•Šμ•„λ„ μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆκ°€ μžλ™μœΌλ‘œ ν•„μš”ν•œ 의쑴 λŒ€μƒ 객체λ₯Ό μ°Ύμ•„μ„œ 의쑴 λŒ€μƒ 객체가 ν•„μš”ν•œ 객체에 μ£Όμž…ν•΄ μ£ΌλŠ” κΈ°λŠ₯μ΄μ˜ˆμš”.
κ΅¬ν˜„ 방법은 @Autowired와 @Resource μ–΄λ…Έν…Œμ΄μ…˜μ„ μ΄μš©ν•΄μ„œ μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆμ–΄μš”.

μƒμ„±μžμ— ν•„μš”ν•˜λ©΄ μƒμ„±μžμ—, λ©”μ†Œλ“œμ— ν•„μš”ν•˜λ©΄ λ©”μ†Œλ“œμ— μ•Œμ•„μ„œ ν•΄μ€˜μš”.

😏 의쑴객체 μžλ™ μ£Όμž…μ˜ 핡심은 μ–΄λ…Έν…Œμ΄μ…˜μΈκ°€λ΄μš”~^^

βœ… @Autowired

  • μ£Όμž…ν•˜λ €κ³  ν•˜λŠ” 객체의 νƒ€μž…μ΄ μΌμΉ˜ν•˜λŠ” 객체λ₯Ό μžλ™μœΌλ‘œ μ£Όμž…ν•΄μš”. (이름은 상관이 μ—†μ–΄μš”.)
  • java μ½”λ“œμ— μ‚½μž…ν•΄μš”.
  • μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— bean듀이 μžˆλŠ”λ°, 여기에 @autowiredμ„€μ •λ˜μ–΄ μžˆλŠ” λ©”μ†Œλ“œ, μƒμ„±μž, property κ°€ μžˆμ–΄μš”.
  • 그러면 beanλ“€ 쀑에 μ μ ˆν•œ 것을 κ³¨λΌμ„œ @aoutowired된 객체에 λ„£μ–΄μ€˜μ•Ό ν•˜λŠ”λ°,
  • μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ˜ λ§Žμ€ 객체듀 쀑에 객체 νƒ€μž…μ„ λ³΄λŠ” κ±°μ˜ˆμš”.
  • 객체의 이름은 상관이 μ—†μ–΄μš”.
  • @aoutowired된 κ°μ²΄μ—μ„œ ν•„μš”λ‘œ ν•˜λŠ” 객체의 νƒ€μž…κ³Ό μΌμΉ˜ν•˜λŠ” 객체λ₯Ό μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ°Ύμ•„μ„œ μžλ™μœΌλ‘œ λ„£μ–΄μ£ΌλŠ” κ±°μ˜ˆμš”.

  • <context:annotaion-config/> : 이 것 ν•˜λ‚˜λ₯Ό μ²˜λ¦¬ν•΄μ€ŒμœΌλ‘œμ¨ ꡉμž₯히 λ§Žμ€ ν΄λž˜μŠ€λ“€μ„ κ°€μ Έμ™€μ„œ μ¨μ£ΌλŠ” κ²ƒμ΄μ˜ˆμš”.
  • 덕뢄에 μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•  수 μžˆλŠ” κ±°μ˜ˆμš”.
  • 이 μ½”λ“œλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” xmlμŠ€ν‚€λ§ˆλ₯Ό μΆ”κ°€ν•΄μ€˜μ•Ό ν•΄μš”.
  • xmls:context와 xsi:schemaLocation을 μΆ”κ°€ν•΄μ€˜μ•Ό ν•΄μš”.

πŸ”Ή 의쑴객체 선택

  • μ–΄λ–»κ²Œ μ˜μ‘΄κ°μ²΄κ°€ μžλ™μœΌλ‘œ μ£Όμž…λ˜λŠ”μ§€, μ„ νƒλ˜λŠ”μ§€ μ•Œμ•„λ΄μš”.
  • λ‹€μˆ˜μ˜ 빈bean객체 쀑 의쑴 객체의 λŒ€μƒμ΄ λ˜λŠ” 객체λ₯Ό μ„ νƒν•˜λŠ” 방법에 λŒ€ν•΄μ„œ ν•™μŠ΅ν•΄μš”.
  • λ™μΌν•œ λ°μ΄ν„°νƒ€μž…μ˜ bean객체가 μ—¬λŸ¬κ°œ μžˆμ„ λ•Œ, @Autowiredλ₯Ό μ“΄ 객체에 μ–΄λ–€ 것을 μ£Όμž…ν•΄μ€˜μ•Ό ν• κΉŒμš”.
  • λ°”λ‘œ 이것을 κ°œλ°œμžκ°€ 선택해쀄 μˆ˜κ°€ μžˆμ–΄μš”.

  • λ™μΌν•œ 데이터 νƒ€μž…μ˜ 객체가 μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆμ— μ—¬λŸ¬ 개 μžˆμ–΄μš”.
  • 이럴 λ•Œ @Autowiredλ₯Ό μ»μ–΄μš”.
  • 그러면 μžλ™μœΌλ‘œ μ£Όμž…μ΄ λ˜μ–΄μ•Ό ν•˜λŠ”λ°, μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” ν—·κ°ˆλ €μš”.
  • κ²°κ΅­ Exception이 λ°œμƒν•΄μš”.
  • λ™μΌν•œ 객체가 2개 이상인 경우 μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” μžλ™ μ£Όμž… λŒ€μƒ 객체λ₯Ό νŒλ‹¨ν•˜μ§€ λͺ»ν•΄μ„œ Exception을 λ°œμƒμ‹œμΌœμš”.
  • 이것을 ν•΄κ²°ν•  수 μžˆλŠ” 방법은 qualifierνƒœκ·Έλ₯Ό μ΄μš©ν•˜λŠ” κ±°μ˜ˆμš”.
  • 그럼 μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆλŠ” ν—·κ°ˆλ¦¬μ§€ μ•Šμ•„μš”.

πŸ”Ή 생λͺ…μ£ΌκΈ°

  • λŒ€λΆ€λΆ„μ˜ 객체λ₯Ό μ΄μš©ν•˜κ³  μžˆλŠ” ν”„λ‘œκ·Έλž¨λ“€μ΄ 객체에 λ˜λŠ” ν”„λ‘œκ·Έλž¨μ— 생λͺ…μ£ΌκΈ°λ₯Ό 가지고 μžˆμ–΄μš”.
  • μŠ€ν”„λ§ ν”„λ ˆμž„μ›Œν¬λ„ 객체듀이 λͺ¨μ—¬μ„œ 유기적으둜 μ„œλ‘œ μž‘λ™μ„ ν•΄μš”.
  • κ·Έλž˜μ„œ bean객체에 생λͺ…μ£ΌκΈ°κ°€ μžˆμ–΄μš”.
  • bean객체가 μ–΄λ–»κ²Œ 생성이 되고, μ†Œλ©Έλ˜λŠ” μ‹œμ μ„ μ•Œμ•„λ΄μš”.
  • μŠ€ν”„λ¦Ό μ»¨ν…Œμ΄λ„ˆμ™€ bean객체의 생λͺ…μ£ΌκΈ°λ₯Ό μ•Œμ•„λ΄μš”.

βœ… μŠ€ν”„λ§ μ»¨ν…Œμ΄λ„ˆ 생λͺ…μ£ΌκΈ°

profile
λͺ‡ λ²ˆμ„ λ„˜μ–΄μ Έλ„ μ•žμœΌλ‘œ 계속 λ‚˜μ•„κ°€μž
post-custom-banner

0개의 λŒ“κΈ€