์คํ๋ง IoC ์ปจํ ์ด๋์์ญํ
- ๋น ์ธ์คํด์ค ์์ฑ
- ์์กด ๊ด๊ณ ์ค์
- ๋น ์ ๊ณต
(IoC ์์)
๊ฐ์ฒด๋ฅผ ๋ด๊ฐ ์ง์ new ์์ฑ (IoC ์ ์ฉ x)
class OwnerController{
private OwnerRepository repository = new OwnerRepository();
}
IoC ๋ฅผ ์ด์ฉํ ์์กด์ฑ ์ฃผ์ (IoC ์ ์ฉ o)
class OwnerController{
private OwnerRepository repo;
public OwnerController(OwnerRepository repo){ //์์ฑ์๋ฅผ ํตํด ๋งค๊ฐ๋ณ์๋ก ๊ฐ์ฒด๋ฅผ ๋ฐ๋๋ค
this.repo = repo;
}
}
IoC OwnerRepository๋ผ๋ ์์กด์ฑ์ OwnerController ์๊ฒ ์ฃผ์ ์ํจ๋ค. -> ์ด๊ฒ์ด IoC ์ด๋ค.
class OwnerControllerTest{
@Test
public void create(){
OwnerRepository repo = new OnwerRepository(); //OwnerRepository๊ฐ์ฒด๋ฅผ ์์ฑํด์
OwnerController controller = new OnwerController(repo);//OwnerController๊ฐ์ฒด์ ์์กด์ฑ ์ฃผ์
}
}
DI (Dependency Injection) ์์กด์ฑ ์ฃผ์ ์
ApplicationContext
- ClassPathXmlApplicationContext( XML )
- AnnotationConfigApplicationContext( Java )
๋น ์ค์
- ๋น ๋ช ์ธ์
- ๋น์ ๋ํ ์ ์๋ฅผ ๋ด๊ณ ์๋ค.
- ์ด๋ฆ
- ํด๋์ค
- ์ค์ฝํ
- ์์ฑ์ ์๊ท๋จผํธ (constructor)
- ํ๋กํผํธ (setter)
- ....
์ปดํฌ๋ํธ ์ค์บ
- ์ค์ ๋ฐฉ๋ฒ
- XML ์ค์ ์์๋ context:component-scan
- ์๋ฐ ์ค์ ์์ @ComponentScan
- xml ์ค์ ํ์ผ์ ๋ค์ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ผํ๋ค.
<context:component-scan base-package = "com.application.demo">
com.application.demo ๋ผ๋ package์ ์๋ bean์ *์ค์บํ์ฌ ๋ฑ๋กํ๊ฒ ๋ค ๋ผ๋ ๋ป.
*Scanning์ ํ ๋์๋ ์ด๋ ธํ ์ด์ ์ ํ์ธํ๊ณ bean์ผ๋ก ์๋์ผ๋ก ๋ฑ๋กํด์ค๋ค.
@SpringBootApplication
@SpringBootAplication๋ auto-configuration์ ๋ด๋นํ๋ค.
@SpringBootApplication ํ๋๋ง์ผ๋ก @EnableAutoConfiguration, @ComponentScan, @Configuration ์ธ ๊ฐ์ง Annotation์ ์ฌ์ฉํ ๊ฒ๊ณผ ๊ฐ์ ๋์์ ํ ์ ์๋ค.
- ํน์ ํจํค์ง ์ดํ์ ๋ชจ๋ ํด๋์ค ์ค์ @Component ์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํ ํด๋์ค๋ฅผ ๋น์ผ๋ก ์๋์ผ๋ก ๋ฑ๋กํด์ค.