๐๏ธ IoC Container
IoC(Inversion of Control) ์ปจํ ์ด๋๋ Sprout Framework์ ํต์ฌ์ ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ์ปดํฌ๋ํธ์ ๋ํ ๊ฐ์ฒด ์์ฑ, ์์กด์ฑ ์ฃผ์ , ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
๊ฐ์โ
Sprout์ IoC ์ปจํ ์ด๋๋ ๋ค์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค:
- ์ปดํฌ๋ํธ ์ค์บ: Reflections ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ ํด๋์ค ์๋ ๊ฐ์ง
- ์์ฑ์ ์ฃผ์ : ํ์ ์์ ํ ์์กด์ฑ ํด๊ฒฐ (ํ๋ ์ฃผ์ ๋ฏธ์ง์)
- ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ: ๋จ๊ณ๋ณ(Phase) ๋น ์์ฑ, ์ด๊ธฐํ, ์๋ฉธ
- ์ํ ์์กด์ฑ ๊ฐ์ง: BeanGraph๋ฅผ ํตํ ์์ ์ ๋ ฌ๊ณผ ์ํ ์ฐธ์กฐ ๊ฐ์ง
- ์์ ์ง์: @Order๋ฅผ ํตํ ๋น ์ด๊ธฐํ ๋ฐ ์ปฌ๋ ์ ์์ ์ ์ด
- CGLIB ํ๋ก์: @Configuration ํด๋์ค์ ์ฑ๊ธํค ๋ณด์ฅ
- ์ ๋ต ํจํด ๊ธฐ๋ฐ ํ์ฅ์ฑ: ๋น ์์ฑ ์ ๋ต๊ณผ ์์กด์ฑ ํด๊ฒฐ ์ ๋ต์ ํ๋ฌ๊ทธ์ธ ๊ตฌ์กฐ
์ปจํ ์ด๋ ์ํคํ ์ฒโ
ํต์ฌ ์ปดํฌ๋ํธโ
Sprout์ IoC ์ปจํ ์ด๋๋ ๋ค์ ์ฃผ์ ํด๋์ค๋ค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ปจํ ์คํธ ๋ฐ ํฉํ ๋ฆฌโ
SproutApplicationContext: ๋ฉ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธDefaultListableBeanFactory: ํต์ฌ ๋น ํฉํ ๋ฆฌ ๊ตฌํClassPathScanner: ํด๋์คํจ์ค ์ค์บ ๋ฐ ๋น ์ ์ ์์ฑBeanGraph: ์์กด์ฑ ๊ทธ๋ํ์ ์์ ์ ๋ ฌ
๋น ์์ฑ ์ ๋ต (Strategy Pattern)โ
BeanInstantiationStrategy: ๋น ์ธ์คํด์คํ ์ ๋ต ์ธํฐํ์ด์คConstructorBasedInstantiationStrategy: ์์ฑ์ ๊ธฐ๋ฐ ๋น ์์ฑFactoryMethodBasedInstantiationStrategy: ํฉํ ๋ฆฌ ๋ฉ์๋ ๊ธฐ๋ฐ ๋น ์์ฑ
์์กด์ฑ ํด๊ฒฐ ์ ๋ต (Chain of Responsibility Pattern)โ
DependencyResolver: ์์กด์ฑ ํด๊ฒฐ ์ธํฐํ์ด์คCompositeDependencyResolver: ์ฌ๋ฌ resolver๋ฅผ ์กฐํฉํ๋ ๋ณตํฉ resolver
DependencyTypeResolver: ํ์ ๋ณ ์์กด์ฑ ํด๊ฒฐ ์ ๋ตSingleBeanDependencyResolver: ๋จ์ผ ๋น ์์กด์ฑ ํด๊ฒฐListBeanDependencyResolver: List ํ์ ์์กด์ฑ ํด๊ฒฐ
์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ (Phase Pattern)โ
BeanLifecycleManager: ์๋ช ์ฃผ๊ธฐ ๋จ๊ณ ์คํ ๊ด๋ฆฌ์BeanLifecyclePhase: ์๋ช ์ฃผ๊ธฐ ๋จ๊ณ ์ธํฐํ์ด์คInfrastructureBeanPhase: Infrastructure ๋น ์์ฑ (order=100)BeanPostProcessorRegistrationPhase: BeanPostProcessor ๋ฑ๋ก (order=200)ApplicationBeanPhase: ์ ํ๋ฆฌ์ผ์ด์ ๋น ์์ฑ (order=300)ContextInitializerPhase: ContextInitializer ์คํ (order=400)
ํ์ ๋งค์นญ ์๋น์คโ
BeanTypeMatchingService: ํ์ ๊ธฐ๋ฐ ๋น ๊ฒ์ ๋ฐ ๋งค์นญ ๋ก์ง ์ค์ ๊ด๋ฆฌ