๐ก ์ ์ด์ ์ญ์ (IoC, Inversion of Control)์ ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋๋ฐ์์, ํ๋ก๊ทธ๋จ์ ์ ์ด ํ๋ฆ ๊ตฌ์กฐ๊ฐ ๋ค๋ฐ๋๋ ๊ฒ์ ์๋ฏธํ๋ค.
์์ฑ๊ณผ ๊ด๋ฆฌ, ๊ฐ์ฒด ๊ฐ์ ์์กด์ฑ ์ฒ๋ฆฌ ๋ฑ์ ํ๋ ์์ํฌ์์ ๋์ ์ฒ๋ฆฌํด์ฃผ๋ ๊ฒ์ด IoC์ ๋ํ์ ์ธ ์์ด๋ค.๐ก IoC Container๋ IoC๋ฅผ ๊ตฌํํ ๊ตฌ์ฒด์ ์ธ ํ๋ ์์ํฌ๋ฅผ ๋งํ๋ค.
IoC Container๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด์ ์์ฑ, ์ด๊ธฐํ, ์์กด์ฑ ์ฒ๋ฆฌ ๋ฑ์ ์๋์ผ๋ก ์ํํ ์ ์๋ค.
โ ๋ํ์ ์ธ IoC Container๋ก๋ Spring Framework์ ApplicationContext๊ฐ ์๋ค.

๐ก Bean์ Spring IoC Container์์ ๊ด๋ฆฌ๋๋ ๊ฐ์ฒด๋ฅผ ๋งํ๋ค.
์์ฑํ๊ณ , ์ด๊ธฐํํ๊ณ , ์์กด์ฑ ์ฃผ์
ํ๊ณ , ์ ๊ฑฐํ๋ ๋ฑ์ ์ผ์ IoC Container๋ฅผ ํตํด ์๋์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.๐ก BeanFactory๋ Spring IoC Container์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํํ๋ก, Bean์ ์์ฑ, ์ด๊ธฐํ, ์ฐ๊ฒฐ, ์ ๊ฑฐ ๋ฑ์ ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌํ๋ค.
Configuration Metadata๋ฅผ ์ฌ์ฉํ๋ค. ๐ก BeanFactory๊ฐ IoC๋ฅผ ์ ์ฉํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ค์ ์ ๋ณด์ด๋ค.
โ ์ค์ ๋ฉํ ์ ๋ณด๋ IoC ์ปจํ ์ด๋์ ์ํด ๊ด๋ฆฌ ๋๋ Bean ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ตฌ์ฑํ ๋ ์ฌ์ฉ ๋๋ค.

https://docs.spring.io/spring-framework/reference/core/beans/basics.html
๐ก BeanFactory๋ฅผ ํ์ฅํ IoC ์ปจํ ์ด๋๋ก Bean์ ๋ฑ๋กํ๊ณ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ BeanFactory์ ๋์ผํ์ง๋ง ์คํ๋ง์ด ์ ๊ณตํ๋ ๊ฐ์ข ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐ๋ก ์ ๊ณตํ๋ค.

ListableBeanFactory : BeanFactory๊ฐ ์ ๊ณตํ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ํฌํจํ๋ค.ApplicationEventPublisher : ์ด๋ฒคํธ ์ฒ๋ฆฌ(Event Handling) ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.MessageSource : ๊ตญ์ ํ(i18n) ๋ฅผ ์ง์ํ๋ ๋ฉ์ธ์ง๋ฅผ ํด๊ฒฐํ๋ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.ResourceLoader : ๋ฆฌ์์ค ํธ๋ค๋ง(Resource Handling) ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.GenericXmlApplicationContext : ApplicationContext๋ฅผ ๊ตฌํํ ํด๋์ค. XML MetaData Configuration์ ์ฝ์ด ์ปจํ
์ด๋ ์ญํ ์ ์ํํ๋ค.AnnotationConfigApplicationContext : ApplicationContext๋ฅผ ๊ตฌํํ ํด๋์ค. Java MetaData Configuration์ ์ฝ์ด ์ปจํ
์ด๋ ์ญํ ์ ์ํํ๋ค.