• Home
  • About
    • on Weekend photo

      on Weekend

      ๐™Ž๐™ฉ๐™ช๐™™๐™ฎ๐™ž๐™ฃ๐™œ

    • Learn More
    • Instagram
    • Github
  • Archive
    • All Posts
    • All Tags
    • All Categories
  • Categories
    • Problem Solving
    • TIL
    • Study
    • Etc
    • ํ•„์‚ฌ
  • Projects

Autowiring

28 May 2021

@Autowired

Spring์—์„  Autowired ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.

Autowired๋Š” ํ•„์š”ํ•œ ์˜์กด ๊ฐ์ฒด์˜ ํƒ€์ž…์— ํ•ด๋‹นํ•˜๋Š” ๋นˆ์„ ์ฐพ์•„ ์ฃผ์ž…ํ•œ๋‹ค.

์ƒ์„ฑ์ž ์˜์กด์„ฑ ์ฃผ์ž… (Constructor Dependency Injection)

์ƒ์„ฑ์ž์— ์˜์กด์„ฑ ์ฃผ์ž…์„ ๋ฐ›๊ณ ์ž ํ•˜๋Š” ํ•„๋“œ๋ฅผ ๋‚˜์—ดํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ๊ถŒ๊ณ ๋˜๋Š” ๋ฐฉ๋ฒ• ์ค‘์˜ ํ•˜๋‚˜์ด๋‹ค.

์žฅ์ 

  • Spring 4.3 ์ด์ƒ๋ถ€ํ„ฐ๋Š” ์ƒ์„ฑ์ž๊ฐ€ ํ•˜๋‚˜์ธ ๊ฒฝ์šฐ์—๋Š” @Autowired๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ์‚ฌ์šฉ์ด ๋œ๋‹ค.

  • ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์ž‘์„ฑ์‹œ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ ์ฃผ์ž…์ด ์šฉ์ดํ•˜๋‹ค.

๋‹จ์ 

  • ์ˆœํ™˜ ์ฐธ์กฐ(Circular Reference) : ์„œ๋กœ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๋นˆ๋“ค์ด ์„œ๋กœ ๋ฌผ๊ณ  ๋Š˜์–ด์ ธ์„œ ๊ณ„์† ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Œ. ์ฆ‰ A๋Š” B์—์„œ ํ•„์š”ํ•œ๋ฐ, B๋Š” ๋˜ A์—์„œ ํ•„์š”ํ•œ ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ˆœํ™˜์ฐธ์กฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์Šคํ”„๋ง์€ ์–ด๋А ๋นˆ์„ ๋จผ์ € ์ƒ์„ฑํ•ด์•ผํ•  ์ง€ ๊ฒฐ์ •ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋˜๊ณ , ์ˆœํ™˜์ฐธ์กฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ์ด ๊ฒฝ์šฐ์—๋Š” ๋‚˜๋จธ์ง€ ์ฃผ์ž… ๋ฐฉ๋ฒ• ์ค‘์— ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

ํ•„๋“œ ์˜์กด์„ฑ ์ฃผ์ž…(Field Dependency Injection)

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์„ ์–ธ ๋ฐฉ์‹์ด๋‹ค. ๋ฉค๋ฒ„ ํ•„๋“œ์— @Autowired annotation์„ ์„ ์–ธํ•˜์—ฌ ์ฃผ์ž…๋ฐ›๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๋‹จ์ 

  • ์˜์กด ๊ด€๊ณ„๊ฐ€ ๋ˆˆ์— ์ž˜ ๋ณด์ด์ง€ ์•Š์•„ ์ถ”์ƒ์ ์ด๊ณ , ์ด๋กœ ์ธํ•ด ์˜์กด์„ฑ ๊ด€๊ณ„๊ฐ€ ๊ณผ๋„ํ•˜๊ฒŒ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • SRP(๋‹จ์ผ ์ฑ…์ž„ ์›์น™)์— ๋ฐ˜ํ•˜๋Š” ์•ˆํ‹ฐ ํŒจํ„ด์ด๋‹ค.
  • DI ์ปจํ…Œ์ด๋„ˆ์™€ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์„ ๊ฐ€์ ธ ์™ธ๋ถ€ ์‚ฌ์šฉ์ด ์šฉ์ดํ•˜์ง€ ์•Š๋‹ค.

Setter ์˜์กด์„ฑ ์ฃผ์ž…(Setter Dependency Injection)

setter ๋ฉ”์†Œ๋“œ์— @Autowired๋ฅผ ์„ ์–ธํ•˜์—ฌ ์ฃผ์ž…๋ฐ›๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์„ setter ๋Œ€์‹ ์— ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ํ•˜๋”๋ผ๋„ ์ฃผ์ž…์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ๋‹ค.

์žฅ์ 

  • ์˜์กด์„ฑ์ด ์„ ํƒ์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ƒ์„ฑ์ž์— ๋ชจ๋“  ์˜์กด์„ฑ์„ ๊ธฐ์ˆ ํ•˜๋ฉด ๊ณผ๋„ํ•˜๊ฒŒ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์„ ํƒ์ ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

๋™์ž‘์›๋ฆฌ

BeanPostProcessor

  • ์ดˆ๊ธฐํ™” ๋ผ์ดํ”„ ์‚ฌ์ดํด ์ด์ „๊ณผ ์ดํ›„์— ํ•„์š”ํ•œ ๋ถ€๊ฐ€ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ดํ”„ ์‚ฌ์ดํด ์ฝœ๋ฐฑ
  • IoC ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋˜์–ด ์žˆ์Œ

AutowiredAnnotationBeanPostProcessor

  • BeanPostProcessor์˜ ๊ตฌํ˜„์ฒด
  • BeanPostProcessor์˜ ๊ตฌํ˜„์ฒด์ด๋ฏ€๋กœ IoC ์ปจํ…Œ์ด๋„ˆ์— Bean์œผ๋กœ ๋“ฑ๋ก๋˜์–ด ์žˆ๋‹ค.

InitializingBean

  • ์ดˆ๊ธฐํ™” ๋ผ์ดํ”„ ์‚ฌ์ดํด
  • Bean ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์‹œ์ 

๋™์ž‘์›๋ฆฌ

  • AutowiredAnnotationBeanPostProcessor์— ์˜ํ•ด ์˜์กด์„ฑ ์ฃผ์ž…์ด ์ด๋ฃจ์–ด์ง„๋‹ค.
  • bean ์ดˆ๊ธฐํ™” ๋ผ์ดํ”„ ์‚ฌ์ดํด ์ด์ „(bean ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์ด์ „)์— @Autowired๊ฐ€ ๋ถ™์–ด์žˆ๋Š” bean์„ ๋ชจ์กฐ๋ฆฌ ์ฐพ์•„ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ์ž‘์—…์„ ํ•œ๋‹ค.
    1. BeanFactory(ApplicationContext)๊ฐ€ BeanPostProcessor ํƒ€์ž…์˜ Bean์„ ์ฐพ๋Š”๋‹ค.
    2. IoC ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋˜์–ด์žˆ๋Š” ๋‹ค๋ฅธ ์ผ๋ฐ˜์ ์ธ ๋นˆ์—๊ฒŒ BeanPostProcessor๋ฅผ ์ ์šฉํ•œ๋‹ค.
    3. ๋‹ค๋ฅธ Bean์— @Autowired Annotation์„ ์ฒ˜๋ฆฌํ•˜๋Š” AutowiredAnnotationBeanPostProcessor์˜ ๋กœ์ง์ด ์ ์šฉ๋œ๋‹ค.
    4. ์˜์กด์„ฑ ์ฃผ์ž…์ด ์ผ์–ด๋‚œ๋‹ค.


spring Share Tweet +1