@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์ ๋ชจ์กฐ๋ฆฌ ์ฐพ์ ์ฃผ์
ํด์ฃผ๋ ์์
์ ํ๋ค.
- BeanFactory(ApplicationContext)๊ฐ BeanPostProcessor ํ์ ์ Bean์ ์ฐพ๋๋ค.
- IoC ์ปจํ ์ด๋์ ๋ฑ๋ก๋์ด์๋ ๋ค๋ฅธ ์ผ๋ฐ์ ์ธ ๋น์๊ฒ BeanPostProcessor๋ฅผ ์ ์ฉํ๋ค.
- ๋ค๋ฅธ Bean์ @Autowired Annotation์ ์ฒ๋ฆฌํ๋ AutowiredAnnotationBeanPostProcessor์ ๋ก์ง์ด ์ ์ฉ๋๋ค.
- ์์กด์ฑ ์ฃผ์ ์ด ์ผ์ด๋๋ค.