[Spring] ์คํ๋ง ๋น(Bean)์ ๊ฐ๋ ๊ณผ ์์ฑ ์๋ฆฌ
๋น(Bean)
Spring IoC ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ ๋น(Bean)์ด๋ผ๋ ์ฉ์ด๋ก ๋ถ๋ฅธ๋ค.
์ฐ๋ฆฌ๊ฐ new ์ฐ์ฐ์๋ก ์ด๋ค ๊ฐ์ฒด๋ฅผ ์์ฑํ์ ๋ ๊ทธ ๊ฐ์ฒด๋ ๋น์ด ์๋๋ค.
ApplicationContext.getBean()์ผ๋ก ์ป์ด์ง ์ ์๋ ๊ฐ์ฒด๋ ๋น์ด๋ค.
์ฆ Spring์์์ ๋น์ ApplicationContext๊ฐ ์๊ณ ์๋ ๊ฐ์ฒด, ์ฆ ApplicationContext๊ฐ ๋ง๋ค์ด์ ๊ทธ ์์ ๋ด๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค.
์ด๋ป๊ฒ Spring IoC ์ปจํ ์ด๋์ ๋น์ ๋ฑ๋กํ ๊น?
๋น์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ค์ํ์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก ํฌ๊ฒ ๋๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
โ Component Scanning
โก ๋น ์ค์ ํ์ผ์ ์ง์ ๋น์ ๋ฑ๋ก
Component Scan
@ComponentScan ์ด๋ ธํ ์ด์ ๊ณผ @Component ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํด์ ๋น์ ๋ฑ๋กํ๋๋ก ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๊ฐ๋จํ ๋งํ๋ฉด @ComponentScan ์ด๋ ธํ ์ด์ ์ ์ด๋ ์ง์ ๋ถํฐ ์ปดํฌ๋ํธ๋ฅผ ์ฐพ์ผ๋ผ๊ณ ์๋ ค์ฃผ๋ ์ญํ ์ ํ๊ณ @Component๋ ์ค์ ๋ก ์ฐพ์์ ๋น์ผ๋ก ๋ฑ๋กํ ํด๋์ค๋ฅผ ์๋ฏธํ๋ค.
Spring IoC ์ปจํ ์ด๋๊ฐ IoC ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๊ณ ๊ทธ ์์ ๋น์ ๋ฑ๋กํ ๋ ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค๋ค์ ๋ผ์ดํ ์ฌ์ดํด ์ฝ๋ฐฑ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋ผ์ดํ ์ฌ์ดํด ์ฝ๋ฐฑ ์ค์๋ @Component ์ ๋ ธํ ์ด์ ์ ์ฐพ์์ ์ด ์ ๋ ธํ ์ด์ ์ด ๋ถ์ด์๋ ๋ชจ๋ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํด ๋น์ผ๋ก ๋ฑ๋กํ๋ ์์ ์ ์ํํ๋ ์ด๋ ธํ ์ด์ ํ๋ก์ธ์๊ฐ ๋ฑ๋ก๋ผ์๋ค.
Spring Boot ํ๋ก์ ํธ์์ @ComonentScan ์ ๋ ธํ ์ด์ ์ด ๋ถ์ด์๋ ํด๋์ค๊ฐ ์ด์ ํด๋นํ๋ค.
๋ค์์ Spring์ PetClinic ์์ ์์ค์ด๋ค.
PetClinicApplication ํด๋์ค์ @SpringBootApplication ์ ๋ ธํ ์ด์ ์ด ๋ถ์ด์๋๋ฐ
์ด ์ ๋ ธํ ์ด์ ์ ๋ด๋ถ์ ์ผ๋ก @ComponentScan ์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ค.
์ด @ComponentScan ์ ๋ ธํ ์ด์ ์ ์ด๋์๋ถํฐ ์ปดํฌ๋ํธ๋ฅผ ์ฐพ์๋ณผ ๊ฒ์ธ์ง ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ค.
@ComponentScan์ด ๋ถ์ด์๋ ํด๋์ค๊ฐ ์๋ ํจํค์ง์์๋ถํฐ ๋ชจ๋ ํ์ ํจํค์ง์ ๋ชจ๋ ํด๋์ค๋ฅผ ํ์ด๋ณด๋ฉฐ @Component ์ ๋ ธํ ์ด์ (๋๋ @Component ์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ์ ๋ ธํ ์ด์ )์ด ๋ถ์ ํด๋์ค๋ฅผ ์ฐพ๋๋ค.
Spring์ด IoC ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๋ ์์ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์ณ ๋น์ผ๋ก ๋ฑ๋กํด์ฃผ๋ ๊ฒ์ด๋ค.
Spring์ PetClinic ์์ ์์
์์ ํด๋์ค๋ @Controller ์ ๋ ธํ ์ด์ ์ด ๋ถ์ด์๋๋ฐ
๋ด๋ถ์ ์ผ๋ก @Component ์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ค.
์ฆ OwnerController๋ Spring์ ์ํด IoC ์ปจํ ์ด๋์ ๋น์ผ๋ก ๋ฑ๋ก๋๋ค.
๋น ์ค์ ํ์ผ์ ์ง์ ๋น์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ
์์ ๊ฐ์ด @Component ์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ๋ง๊ณ ๋ ๋น ์ค์ ํ์ผ์ ์ง์ ๋น์ผ๋ก ๋ฑ๋กํ ์ ์๋ค.
๋น ์ค์ ํ์ผ์ XML๊ณผ ์๋ฐ ์ค์ ํ์ผ๋ก ์์ฑํ ์ ์๋๋ฐ ์ต๊ทผ ์ถ์ธ๋ ์๋ฐ ์ค์ ํ์ผ์ ์ข ๋ ๋ง์ด ์ฌ์ฉํ๋ค.
์๋ฐ ์ค์ ํ์ผ์ ์๋ฐ ํด๋์ค๋ฅผ ์์ฑํด์ ์์ฑํ ์ ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก xxxxConfiguration์ ๊ฐ์ด ๋ช ๋ช ํ๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋์ค์ @Configuration ์ ๋ ธํ ์ด์ ์ ๋ถ์ธ๋ค.
๊ทธ ์์ @Bean ์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํด ์ง์ ๋น์ ์ ์ํ๋ค.
1
2
3
4
5
6
7
|
@Configuration
public class SampleConfiguration {
@Bean
public SampleController sampleController() {
return new SampleController;
}
}
|
cs |
sampleController()์์ ๋ฆฌํด๋๋ ๊ฐ์ฒด๊ฐ IoC ์ปจํ ์ด๋ ์์ ๋น์ผ๋ก ๋ฑ๋ก๋๋ค.
๋ฌผ๋ก ์ด๋ ๊ฒ ๋น์ ์ง์ ์ ์ํด์ ๋ฑ๋กํ๋ฉด @Component ์ ๋ ธํ ์ด์ ์ ๋ถ์ด์ง ์์๋ ๋๋ค.
@Configuration ์ ๋ ธํ ์ด์ ์ ๋ณด๋ฉด ์ด ์ ๋ ธํ ์ด์ ๋ @Component๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ @ComponentScan์ ์ค์บ ๋์์ด ๋๊ณ ๊ทธ์ ๋ฐ๋ผ ๋น ์ค์ ํ์ผ์ด ์ฝํ๋ ๊ทธ ์์ ์ ์ํ ๋น๋ค์ด IoC ์ปจํ ์ด๋์ ๋ฑ๋ก๋๋ ๊ฒ์ด๋ค.
References
์ธํ๋ฐ - ๋ฐฑ๊ธฐ์ ๋์ ์์ ๋ก ๋ฐฐ์ฐ๋ ์คํ๋ง ์ ๋ฌธ(๊ฐ์ ํ)์ ์๊ฐํ๋ฉฐ ์ ๋ฆฌํ ํฌ์คํ ์ ๋๋ค.
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] ์คํ๋ง PSA (0) | 2020.03.01 |
---|---|
[Spring] ์คํ๋ง AOP ๊ฐ๋ ์ดํด ๋ฐ ์ ์ฉ ๋ฐฉ๋ฒ (4) | 2020.02.29 |
[Spring] ์์กด์ฑ ์ฃผ์ (DI, Dependency Injection)์ ์ธ๊ฐ์ง ๋ฐฉ๋ฒ (0) | 2020.02.28 |
[Spring] ์คํ๋ง ์์ PetClinic ํ๋ก์ ํธ ๋ถ์ ๋ฐ ๊ธฐ๋ฅ ๋ณ๊ฒฝ (0) | 2020.02.28 |
[Spring] ์คํ๋ง ์์ ํ๋ก์ ํธ PetClinic ๋น๋ ๋ฐ ์คํํ๊ธฐ (0) | 2020.02.27 |
๋๊ธ