๐๏ธ IoC Container
IoC(Inversion of Control) ์ปจํ ์ด๋๋ Sprout Framework์ ํต์ฌ์ ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ์ปดํฌ๋ํธ์ ๋ํ ๊ฐ์ฒด ์์ฑ, ์์กด์ฑ ์ฃผ์ , ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
๊ฐ์โ
Sprout์ IoC ์ปจํ ์ด๋๋ ๋ค์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค:
- ์ปดํฌ๋ํธ ์ค์บ: Reflections ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ ํด๋์ค ์๋ ๊ฐ์ง
- ์์ฑ์ ์ฃผ์ : ํ์ ์์ ํ ์์กด์ฑ ํด๊ฒฐ (ํ๋ ์ฃผ์ ๋ฏธ์ง์)
- ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ: ๋น ์์ฑ, ์ด๊ธฐํ, ์๋ฉธ
- ์ํ ์์กด์ฑ ๊ฐ์ง: BeanGraph๋ฅผ ํตํ ์์ ์ ๋ ฌ๊ณผ ์ํ ์ฐธ์กฐ ๊ฐ์ง
- ์์ ์ง์: @Order๋ฅผ ํตํ ๋น ์ด๊ธฐํ ๋ฐ ์ปฌ๋ ์ ์์ ์ ์ด
- CGLIB ํ๋ก์: @Configuration ํด๋์ค์ ์ฑ๊ธํค ๋ณด์ฅ
์ปจํ ์ด๋ ์ํคํ ์ฒโ
ํต์ฌ ์ปดํฌ๋ํธโ
Sprout์ IoC ์ปจํ ์ด๋๋ ๋ค์ ์ฃผ์ ํด๋์ค๋ค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
SproutApplicationContext
: ๋ฉ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธDefaultListableBeanFactory
: ํต์ฌ ๋น ํฉํ ๋ฆฌ ๊ตฌํClassPathScanner
: ํด๋์คํจ์ค ์ค์บ ๋ฐ ๋น ์ ์ ์์ฑBeanGraph
: ์์กด์ฑ ๊ทธ๋ํ์ ์์ ์ ๋ ฌ
์ปจํ ์ด๋ ์ด๊ธฐํ ๊ณผ์ โ
public class SproutApplication {
public static void run(Class<?> primarySource) throws Exception {
// 1. ํจํค์ง ์ค์บ ์ค์
List<String> packages = getPackagesToScan(primarySource);
// 2. ์ ํ๋ฆฌ์ผ์ด ์
์ปจํ
์คํธ ์์ฑ
ApplicationContext applicationContext =
new SproutApplicationContext(packages.toArray(new String[0]));
// 3. ์ปจํ
์คํธ ์ด๊ธฐํ (refresh)
applicationContext.refresh();
// 4. ์๋ฒ ์์
HttpServer server = applicationContext.getBean(HttpServer.class);
server.start(port);
}
}
์ปดํฌ๋ํธ ์ค์บโ
์ง์๋๋ ์ด๋ ธํ ์ด์ โ
Sprout๋ ๋ค์ ์ปดํฌ๋ํธ ์ด๋ ธํ ์ด์ ์ ์ธ์ํฉ๋๋ค:
@Component // ์ผ๋ฐ ์ปดํฌ๋ํธ
@Service // ๋น์ฆ๋์ค ๋ก์ง ๊ณ์ธต
@Repository // ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต
@Controller // ์น ๊ณ์ธต
@Configuration // ๊ตฌ์ฑ ํด๋์ค
@Aspect // AOP ์ ์คํํธ
@ControllerAdvice // ๊ธ๋ก๋ฒ ์์ธ ์ฒ๋ฆฌ
@WebSocketHandler // WebSocket ํธ๋ค๋ฌ