Bean Overview

์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ด€๋ฆฌ๋˜๋Š” Bean์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ด Bean์€ XML <bean/> ์ •์˜ ๋˜๋Š” ๋‹ค๋ฅธ ํ˜•์‹์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

Spring์€ ์ด๋Ÿฌํ•œ bean ์ •์˜๋ฅผ ํ†ตํ•ด BeanDefinition ๊ฐ์ฒด๋ฅผ ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉํ•ด ๊ฐ bean์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด BeanDefinition ๊ฐ์ฒด์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ์š” ์ •๋ณด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค:

  1. ํด๋ž˜์Šค ์ด๋ฆ„: ํ•ด๋‹น bean์„ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค์˜ ํŒจํ‚ค์ง€-ํฌํ•จ ์ด๋ฆ„.

  2. Bean์˜ ๋™์ž‘ ์„ค์ •: ์ปจํ…Œ์ด๋„ˆ์—์„œ ํ•ด๋‹น bean์˜ ๋™์ž‘ ๋ฐฉ์‹์„ ์ง€์ •ํ•˜๋Š” ์š”์†Œ(์˜ˆ: ๋ฒ”์œ„, ๋ผ์ดํ”„์‚ฌ์ดํด ์ฝœ๋ฐฑ ๋“ฑ).

  3. ๋‹ค๋ฅธ Bean์— ๋Œ€ํ•œ ์ฐธ์กฐ: ํ•ด๋‹น bean์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋‹ค๋ฅธ bean์— ๋Œ€ํ•œ ์ฐธ์กฐ(์˜์กด์„ฑ).

  4. ๊ธฐํƒ€ ๊ตฌ์„ฑ ์š”์†Œ: ์ƒ์„ฑ๋œ ๊ฐ์ฒด์˜ ์ถ”๊ฐ€ ์„ค์ • (์˜ˆ: ์ปค๋„ฅ์…˜ ํ’€์˜ ์—ฐ๊ฒฐ ์ˆ˜ ์ œํ•œ ๋“ฑ).

Bean ์ •์˜ ์†์„ฑ

์Šคํ”„๋ง์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ BeanDefinition์€ ์—ฌ๋Ÿฌ ์†์„ฑ๋“ค๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

์†์„ฑ

์„ค๋ช…

ํด๋ž˜์Šค (Class)

Bean์˜ ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฆ„ (Name)

Bean์˜ ๊ณ ์œ  ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค.

๋ฒ”์œ„ (Scope)

Bean์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. (์‹ฑ๊ธ€ํ†ค, ํ”„๋กœํ† ํƒ€์ž… ๋“ฑ)

์ƒ์„ฑ์ž ์ธ์ž

์˜์กด์„ฑ ์ฃผ์ž…์„ ์œ„ํ•œ ์ƒ์„ฑ์ž ์ธ์ž๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœํผํ‹ฐ (Properties)

์˜์กด์„ฑ ์ฃผ์ž…์„ ์œ„ํ•œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ž๋™ ์—ฐ๊ฒฐ ๋ชจ๋“œ

์ž๋™์œผ๋กœ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ง€์—ฐ ์ดˆ๊ธฐํ™” ๋ชจ๋“œ

ํ•ด๋‹น bean์ด ์ง€์—ฐ ์ดˆ๊ธฐํ™”๋ ์ง€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ

bean์˜ ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์†Œ๋ฉธ ๋ฉ”์„œ๋“œ

bean์˜ ์†Œ๋ฉธ ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

Bean ๋“ฑ๋ก ๋ฐ ๊ด€๋ฆฌ

์ผ๋ฐ˜์ ์œผ๋กœ ApplicationContext๋Š” ์‚ฌ์ „์— ์ •์˜๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ bean์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ ์™ธ๋ถ€์—์„œ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋„ registerSingleton() ๋ฐ registerBeanDefinition() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜๋™์œผ๋กœ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, ์ด๋Ÿฌํ•œ ๊ฐ์ฒด๋‚˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ๋“ฑ๋ก๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ž๋™ ์™€์ด์–ด๋ง์ด๋‚˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ bean์„ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ExtendWith(SpringExtension::class)
@ContextConfiguration("file:web/WEB-INF/spring/applicationContext.xml")
class IocContainerTest {

    @Autowired
    lateinit var beanFactory: BeanFactory

    @Autowired
    lateinit var applicationContext:GenericApplicationContext
    @Test
    fun test() {
        applicationContext.registerBean<Any>("test")
    }
}

Bean ์ด๋ฆ„ ์ง€์ •

๋ชจ๋“  bean์€ ๊ณ ์œ ํ•œ ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ ธ์•ผ ํ•˜๋ฉฐ, XML ๊ธฐ๋ฐ˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์—์„œ id ๋˜๋Š” name ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. name ์†์„ฑ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ณ„์นญ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ŠคํŽ˜์ด์Šค, ์‰ผํ‘œ, ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๋ณ„์นญ์€ bean์˜ ์‚ฌ์šฉ์„ ๋”์šฑ ์œ ์—ฐํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.

Bean ์˜ค๋ฒ„๋ผ์ด๋”ฉ

bean ์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ๋™์ผํ•œ ์‹๋ณ„์ž๋กœ ์—ฌ๋Ÿฌ bean์„ ๋“ฑ๋กํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ์ง€์›๋˜์ง€๋งŒ, ํ–ฅํ›„ ์Šคํ”„๋ง ๋ฒ„์ „์—์„œ๋Š” ์ด ๊ธฐ๋Šฅ์ด ๋” ์ด์ƒ ์ง€์›๋˜์ง€ ์•Š์„ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. allowBeanDefinitionOverriding์„ false๋กœ ์„ค์ •ํ•˜์—ฌ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ๊ธˆ์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ์‹œ INFO ๋ ˆ๋ฒจ์˜ ๋กœ๊ทธ๊ฐ€ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

Bean ์ธ์Šคํ„ด์Šคํ™”

Bean ์ •์˜๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” "๋ ˆ์‹œํ”ผ"์™€ ๊ฐ™์œผ๋ฉฐ, ์ปจํ…Œ์ด๋„ˆ๊ฐ€ getBean()์„ ํ˜ธ์ถœํ•  ๋•Œ ์ด ๋ ˆ์‹œํ”ผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ bean์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. XML ๊ธฐ๋ฐ˜ ์„ค์ •์—์„œ๋Š” <bean> ํƒœ๊ทธ์˜ class ์†์„ฑ์œผ๋กœ bean์˜ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ƒ์„ฑ์ž ์ธ์Šคํ„ด์Šคํ™”

์ผ๋ฐ˜์ ์œผ๋กœ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ bean์„ ์ธ์Šคํ„ด์Šคํ™”ํ•˜์ง€๋งŒ, ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์ƒ์„ฑ์ž ์ธ์ž๋‚˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ

์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ factory-method ์†์„ฑ์„ ์‚ฌ์šฉํ•ด ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

<bean id="clientService" class="examples.ClientService" factory-method="createInstance"/>

์ธ์Šคํ„ด์Šค ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ

๊ธฐ์กด์— ๋“ฑ๋ก๋œ bean์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด bean์„ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ factory-bean ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๊ฐ€ ํฌํ•จ๋œ bean์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

<bean id="clientService" factory-bean="serviceLocator" factory-method="createClientServiceInstance"/>

Bean์˜ ๋Ÿฐํƒ€์ž„ ํƒ€์ž… ํ™•์ธ

bean์˜ ๋Ÿฐํƒ€์ž„ ํƒ€์ž…์„ ํ™•์ธํ•˜๋ ค๋ฉด BeanFactory.getType() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‹ค์ œ ๊ฐ์ฒด ํƒ€์ž…์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ Spring IoC ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ณ , ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ bean์„ ์ •์˜, ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Last updated