-
์คํ๋ง ๋น(Bean)์ด๋?
- ๋น์ ์คํ๋ง ์ปจํ ์ด๋์ ์ํด ๊ด๋ฆฌ๋๋, ์ฌ์ฌ์ฉ๊ฐ๋ฅํ ์ํํธ์จ์ด ์ปดํฌ๋ํธ๋ก ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ ๋ปํ๋ค.
- @Bean ์ด๋ ธํ ์ด์ ์ ํตํด ๋ฉ์๋๋ก๋ถํฐ ๋ฐํ๋ ๊ฐ์ฒด๋ฅผ ์ปจํ ์ด๋์ ๋ฑ๋กํ๋ค.
- ๊ธฐ์กด์ ์๋ฐ ํ๋ก๊ทธ๋๋ฐ์ฒ๋ผ class๋ฅผ ์์ฑํ๊ณ New๋ฅผ ์ ๋ ฅํ์ฌ ๊ฐ์ฒด ์์ฑํ๋ ๋ฐฉ์ → ์คํ๋ง์ ์ํด ์์ฑ๋๊ณ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก
- IoC(์ ์ด์ ์ญ์ )์ ํด๋น → ๊ฐ์ฒด์ ์์ฑ ๋ฐ ์ ์ด๊ถ์ด ์ฌ์ฉ์๊ฐ ์๋ ์คํ๋ง์๊ฒ ๋์ด๊ฐ.
์คํ๋ง ์ปจํ ์ด๋
- ์คํ๋ง ๋น์ ์๋ช ์ฃผ๊ธฐ(๊ฐ์ฒด ์์ฑ→ ์์กด ์ค์ → ์ด๊ธฐํ → ์ฌ์ฉ → ์๋ฉธ ๊ณผ์ )๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ์คํ๋ง ๋น๋ค์๊ฒ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- ๊ฐ์ฒด๋ค๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์์์ ์์ฑํด์ค๋ค.
์คํ๋ง ๋น์ ์คํ๋ง ์ปจํ ์ด๋์ ๋ฑ๋ก ๋ฐฉ๋ฒ
(1) ์ปดํฌ๋ํธ ์ค์บ ๋ฐฉ์
- Component ์ด๋ ธํ ์ด์ (Annotation) ์ด์ฉ
- @Component ์ด๋ ธํ ์ด์ ์ ํตํด ๋น์ ๋ฑ๋ก → ์คํ๋ง์ด ์ด๋ ธํ ์ด์ ์ ์ธ์ํ์ฌ ์์ฒด์ ์ผ๋ก ์คํ๋ง ์ปจํ ์ด๋์ ์คํ๋ง ๋น์ ๋ฑ๋กํจ.
- @Controller, @Service, @Repository ์ด๋ ธํ ์ด์ ์ @Component๋ฅผ ํฌํจํ์ฌ ๋ง์ฐฌ๊ฐ์ง๋ก ์คํ๋ง ๋น์ผ๋ก ์๋ ๋ฑ๋ก์ ํด์ค.
์ด๋ ธํ ์ด์ ๋ป
- @Controller
- ์คํ๋ง MVC ์ปจํธ๋กค๋ฌ๋ก ์ธ์๋๋ค.
- @Repository
- ์คํ๋ง ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต์ผ๋ก ์ธ์ํ๊ณ ํด๋น ๊ณ์ธต์์ ๋ฐ์ํ๋ ์์ธ๋ ๋ชจ๋ DataAccessException์ผ๋ก ๋ณํํ๋ค.
- @Service
- ํน๋ณํ ์ฒ๋ฆฌ๋ ํ์ง ์์ผ๋, ๊ฐ๋ฐ์๋ค์ด ํต์ฌ ๋น์ฆ๋์ค ๊ณ์ธต์ ์ธ์ํ๋๋ฐ ๋์์ ์ค๋ค.
- @Configuration
- ์คํ๋ง ์ค์ ์ ๋ณด๋ก ์ธ์ํ๊ณ ์คํ๋ง ๋น์ด ์ฑ๊ธํค์ ์ ์งํ๋๋ก ์ถ๊ฐ ์ฒ๋ฆฌ๋ฅผ ํ๋ค. (๋ฌผ๋ก ์คํ๋ง ๋น ์ค์ฝํ๊ฐ ์ฑ๊ธํค์ด ์๋๋ผ๋ฉด ์ถ๊ฐ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์.)
(2) Bean Configuration ํ์ผ์ ์ง์ ๋น์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ
@Configuration๊ณผ @Bean ์ด๋ ธํ ์ด์ ์ ํตํด ์ง์ ๋น์ ๋ฑ๋กํ ์๋ ์์.
@Configuration → ์คํ๋ง ํ๋ก์ ํธ์์ configuration ์ญํ ์ ํ๋ class๋ฅผ ์ง์
@Bean → ํด๋น configuration ํด๋์ค ํ์์ ๋น์ผ๋ก ๋ฑ๋กํ๊ณ ์ ํ๋ ํด๋์ค์ ๋น ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ ๋น์ผ๋ก ๋ฑ๋ก
- ApplicationContext๋ฅผ ํธ์ถํ์ฌ ๋น์ ์๋ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
- XML๋ก ์ค์ ํ๋ ๋ฐฉ์๋ ์์ง๋ง, ์ต๊ทผ์๋ ์ ์ฌ์ฉํ์ง ์๋๋ค.
@Component vs @Bean
- @Bean
- ๊ฐ๋ฐ์๊ฐ ์ปจํธ๋กค์ด ๋ถ๊ฐ๋ฅํ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ Bean์ผ๋ก ๋ฑ๋กํ๊ณ ์ถ์ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ค.
- ์ ํํ๋์ง ์๊ฑฐ๋, ์ํฉ์ ๋ฐ๋ผ ๊ตฌํ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํด์ผํ ๊ฒฝ์ฐ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋กํ๋ค.
- ๋ฉ์๋ ๋๋ ์ด๋ ธํ ์ด์ ๋จ์์ ๋ถ์ผ ์ ์๋ค.
- @Component
- ๊ฐ๋ฐ์๊ฐ ์ง์ ์ปจํธ๋กค์ด ๊ฐ๋ฅํ ํด๋์ค๋ค์ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ค. ์ ํํ๋ ์ปจํธ๋กค๋ฌ, ์๋น์ค, ๋ฆฌํฌ์งํ ๋ฆฌ ๊ฐ์ ์ฝ๋์ ์ฌ์ฉํ๋ค.
- ํด๋์ค ๋๋ ์ธํฐํ์ด์ค ๋จ์์ ๋ถ์ผ ์ ์๋ค.
์คํ๋ง ์ ๊ทผ ๋ฐฉ๋ฒ
- ApplicationCotext(์คํ๋ง ์ปจํ ์ด๋)๋ฅผ ํตํด์ bean์ ์ก์ธ์ค
- getBean() → bean์ ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์ด
์คํ๋ง ๋น ์กฐํ ๋ฐฉ๋ฒ
- ac.getBeanDefinitionNames(); : ์คํ๋ง์ ๋ฑ๋ก๋ ๋ชจ๋ ๋น ์ด๋ฆ์ ์กฐํ, ๋น ๊ฐ์ฒด ์กฐํ
- ac.getBean(๋น์ด๋ฆ, ํ์ ) : ๋น ์ธ์คํด์ค ์กฐํ
- ac.getBean(ํ์ ) : ๋น ์ธ์คํด์ค ์กฐํ(๊ฐ์ ํ์ ์ ์คํ๋ง ๋น์ด ๋ ์ด์์ด๋ฉด ์์ธ ๋ฐ์)
- ac.getBeansOfType(ํ์ ) : ํด๋น ํ์ ์ ๋ชจ๋ ๋น ์กฐํ
'๐ญ Study > : Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ