spring DI
๐ spring DI
์ปดํฌ๋ํธ(Component)๋ ํ๋ก๊ทธ๋๋ฐ์ ์์ด ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ ๊ฐ๊ฐ์ ๋ ๋ฆฝ๋ ๋ชจ๋์ ๋ปํ๋ค.
์ฌ๋ฌ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ํตํฉํ ๋ ์์กด ๊ด๊ณ ์ฃผ์ ๋์์ธ ํจํด์ด ๋งค์ฐ ํจ๊ณผ์
DI
- ์์กด ๊ด๊ณ ์ฃผ์
- ์ค๋ธ์ ํธ ๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ๋ง๋๋ ๊ฒ
- ์คํ๋ง ํ๋ ์์ํฌ๋ ๋ฐํ์์ ์ฌ์ฉํ ๊ฐ์ ๋ค์ ์์กด ๊ด๊ณ๋ฅผ ๋ถ์ฌํจ
- ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๋ค.
IoC
- ์ญ์ ์ ์ด , ์ฆ ์ธ์คํด์ค๋ฅผ ์ ์ดํ๋ ์ฃผ๋๊ถ์ด ์ญ์ ๋๋ค๋ ์๋ฏธ
- ์ปจํฌ๋ํธ๋ฅผ ๊ตฌ์ฑํ๋ ์ธ์คํด์ค ์์ฑ๊ณผ ์์กด ๊ด๊ณ ์ฐ๊ฒฐ์ ๊ฐ๋ฐ์์ ์์ค ์ฝ๋๊ฐ ์๋ DI ์ปจํ ์ด๋๊ฐ ๋์ ํด ์ฃผ๊ธฐ ๋๋ฌธ์ ์ ์ด๊ฐ ์ญ์ ๋์๋ค๊ณ ์ ์ํจ
IOC ์ปจํ ์ด๋
- ์คํ๋ง ํ๋ ์์ํฌ์ด ์ ๊ณตํ๋ IoC์ปจํ ์ด๋๋ฅผ ํตํด ์ธ์คํด์ค์ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ ๋ฐ ์์กด ๊ด๊ณ๋ฅผ ์ฃผ์ ์ ์ฒ๋ฆฌํจ
DI ์ปจํ ์ด๋๋ฅผ ํ์ฉํ ์ ํ๋ฆฌ์ผ์ด์ : new ์ฐ์ฐ์ ์ ๊ฑฐ
membersamplemain ์ด ์ด์ฉํ๋ memberservice ์ธ์คํด์ค, ๊ทธ๋ฆฌ๊ณ memberservice๊ฐ ์ด์ฉํ๋ memberdao์ธ์คํด์ค๋ di ์ปจํ ์ด๋๊ฐ ์์ฑ memberdao ์ธ์คํด์ค๋ฅผ memberservice ์ ์ธ์ ์
DI ์ปจํ ์ด๋๋ฅผ ํ์ฉํ ์ ํ๋ฆฌ์ผ์ด์ : ์ธํฐํ์ด์ค ๊ธฐ๋ฐ์ ์ปดํฌ๋ํธํ
์ธํฐํ์ด์ค ๊ธฐ๋ฐ์ ์ปดํฌ๋ํธํ๋ฅผ ์คํํ๋ ค๋ฉด productservice์ productdao(๋ผ๋ ์ด๋ฆ)
์คํ๋ง ๋น
- ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด
ioc ์ปจํ ์ด๋
- ์คํ๋ง ๋น์ ์์ฑ , ๊ด๊ณ, ์กฐ๋ฆฝ, ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ ์คํ๋ง ํ๋ ์ ์ํฌ์ ํต์ฌ
- ์์กด ๊ด๊ณ ์ฃผ์ ์ ์ด์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ์ปดํฌ๋ํธ๋ค์ ๊ด๋ฆฌํ๋ค.
BeanFactory
- ๋น์ ์์ฑ, ๋น์ ์์กด๊ด๊ณ ๊ด๋ฆฌ๋ฑ์ DI์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ์ ๊ณต
- ๋น์ด ๋ง์ง ์๊ณ ๊ฒฝ๋ ์ปจํ ์ด๋๋ก ์์ ํ ๋ ํ์ฉ
ApplicationContext
- ์ผ๋ฐ์ ์ธ ์คํ๋ง ์ปจํ ์ด๋๋ฅผ ์๋ฏธ
- BeanFactory ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ ํ์ ์ธํฐํ์ด์ค๋ก ํ์ฅ๋ ๊ธฐ๋ฅ ์ ๊ณต
WebApplicationContext
- ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ApplicationContext
- 2๊ฐ์ง ์ข
๋ฅ
- ContextLoaderListener์ ์ํด ์์ฑ๋๋ WAC
- DAP,Service๊ด๋ จ ์คํ๋ง ๋น๋ค์ ๋ฑ๋ก
- root-context.xmlํ์ผ์ ์ค์
- DispatcherServlet์ ์ํด ์์ฑ๋๋ WAC
- ์ปจํธ๋กค๋ฌ์ ๊ฐ์ ์๋ธ๋ฆฟ ๊ด๋ จ ๋น ๋ฑ๋ก
- ํด๋น ์๋ธ๋ฆฟ ๋ฐ๋ค ์ฌ์ฉํ wac๊ฐ์ฒด ์์ฑ
- servlet-context.xmlํ์ผ์ ์ค์
- ContextLoaderListener์ ์ํด ์์ฑ๋๋ WAC
xml ์ค์ ๋ฐฉ์
- ์์ฑ์ ๊ธฐ๋ฐ ์์กด์ฑ์ฃผ์
- ์์ฑ์์ ์ธ์๋ฅผ ์ฌ์ฉํด ์์กด์ฑ์ ์ฃผ์
- ์ค์ ํ์ผ xml์ constructor-org ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฃผ์ ํ ์ปดํฌ๋ํธ๋ฅผ ์ค์
- ์ค์ ์ ๊ธฐ๋ฐ ์์กด์ฑ ์ฃผ์
- ๋ฉ์๋์ ์ธ์๋ฅผ ํตํด ์์กด์ฑ์ ์ฃผ์
- ์ค์ ํ์ผ xml์ property์์์ name ์์ฑ์ ์ฃผ์ ํ ์ปดํฌ๋ํธ์ ์ด๋ฆ์ ์ค์
Annotation ์ค์ ๋ฐฉ์
- ๋ฉํ๋ฐ์ดํฐ๋ฅผ xml๋ฑ์ ๋ฌธ์์ ์ค์ ํ๋ ๊ฒ์ด ์๋๋ผ ์์ค์ฝ๋์ @์ ๋ ธํ ์ด์ ์ด ํํ๋ก ํํ
- ํด๋์ค , ๋ฉ์๋, ํ๋์ ์ ์ธ๋ถ์ ํํํ์ฌ ํน์ ๊ธฐ๋ฅ์ด ์ ์ฉ๋์์์ ์๋ ค์ค
- ์ ํ๋ฆฌ์ผ์ด์ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก xml์๋ ใ ์ด ๋ณต์กํ์ฌ ์ ๋ ธํ ์ด์ ์ ์ฉ์ผ๋ก ๊ฐ์
@Autowired
- ์ปจํ ์ด๋๊ฐ ๋น๊ณผ ๋ค๋ฅธ๋น๊ณผ์ ์์กด์ฑ์ ์๋์ผ๋ก ์ฐ๊ฒฐํ๋๋ก ํ๋ ์๋จ
- ์ธ์คํด์ค ๋ณ์(๋น) ์์ @Autowired์ ๋ ธํ ์ด์ ์ ๋ถ์ด๋ฉด ํด๋น ํ์ ์ Component๋ฅผ ์ฐพ์ ๊ทธ ๋น์ ์ฃผ์ ์์ผ์ค๋ค.
- @autowired ์ค์ ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ annotation์ค์ ์ด ํ์ํ๋ค ๋จ component-scan์ด ์ค์ ๋์ด์์ผ๋ฉด ์๋ต ๊ฐ๋ฅ
- ๋น๋ฑ๋ก์ ApplicationContext.xml์ ์ค์ ํ๋ค (context:annotation-config๋ฅผ ํตํด)
@Component
- ์ปจํ ์ด๋๊ฐ ์ธ์ ์ ์ ์ํ ์ธ์คํด์ค(๋น)์ ์ค์ ํ๋ ์๋จ
- ํด๋์ค ์ ์ธ ์์ @Component๋ฅผ ๋ถ์ด๋ฉด ์ปจํ ์ด๋๊ฐ ์ฐพ์์ ๊ด๋ฆฌํ๊ณ @Autowired๊ฐ ๋ถ์ ์ธ์คํด์ค ๋ณ์ ์ ์ฃผ์ ์์ผ์ค๋ค.
- @Component ์ ๋ ธํ ์ด์ ์ด ๋ถ์ ํด๋์ค๋ฅผ ์๋์ผ๋ก ๋น์ผ๋ก ๋ฑ๋กํ๋ ๊ธฐ๋ฅ์ด๋ค.
- (context:component-scan)์ ApplicationContext.xml์ ์ค์ ํ๊ณ ๊ฐ ํด๋์ค ์์ component๋ฅผ ๋ถ์ด๊ณ ์ธ์คํด์ค ๋ณ์ ์์ Autowired๋ฅผ ๋ถ์ธ๋ค
java๋ก DI ์ค์
- xml๋ฌธ๋ฒ ๋์ ์๋ฐ ์ฝ๋๋ก ๋น์ ์ค์ ํ๋ค
- ํ์ฌ์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ DIํ๊ณ ์ ํ ๊ฒฝ์ฐ์๋ ์์ค๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๊ณ ์๊ธฐ ๋ ๋ฌธ์ ์ ๋ ธํ ์ด์ ์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ถ๊ฐ๋ฅํ๋ค. -> XML ๋ก ์ค์ โข XML ๊ธฐ๋ฐ + ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ, ์๋ฐ ๊ธฐ๋ฐ + ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ
@Configuration
- ๋น ์ค์ ๋ฉํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ํด๋์ค๋ฅผ ์ ์ธ
- ํด๋น ํด๋์ค๊ฐ ์คํ๋ง ์ค์ ์ผ๋ก ์ฌ์ฉ๋จ
@Bean
- ํด๋์ค ๋ด์ ๋งค์๋๋ฅผ ์ ์ํ์ฌ ์๋ก์ด ๋น ๊ฐ์ฒด๋ฅผ ์ ์ํ ๋ ์ฌ์ฉ
- name ์์ฑ์ ์ฌ์ฉํ์ฌ ์๋ก์ด ๋น ์ด๋ฆ ์ ์ฉ ๊ฐ๋ฅ