BeanFactory, BeanDefinition (+ ์คํ๋ง ์ปจํ ์ด๋ XML ์ค์ )
by JiwonDev# ์คํ๋ง ์ปจํ ์ด๋
์คํ๋ง ์ปจํ ์ด๋๋ BeanFactory์ ApplicationContext๋ฅผ ๊ตฌ๋ถํ๋ค๊ณ ํ๋ค. ์ด๊ฑด ๋ฌด์จ ์๋ฏธ์ผ๊น?
@ BeanFactory
- ์คํ๋ง ์ปจํ ์ด๋์ ์ต์์ ์ธํฐํ์ด์ค์ด๋ค.
- ์คํ๋ง ๋น์ ๊ด๋ฆฌํ๊ณ ์กฐํํ๋ ์ญํ ์ ๋ด๋นํ๋ค.
- getBean() ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ฌ ๋ฑ๋ก๋ ๋น์ ์กฐํํ ์ ์๊ฒ ํด์ค๋ค.
- ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ BeanFactory๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด๋ค.
@ ApplicationContext
BeanFactory์ ๊ธฐ๋ฅ์ ๋ชจ๋ ์์๋ฐ์ ์ ๊ณตํ๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ตณ์ด BeanFactory์ ApplicationContext๋ฅผ ๋๋ ์ด์ ๋ ๋ฌด์์ผ๊น? ๊ทธ๊ฑด ๋ฐ๋ก ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ ๋น์ ๊ด๋ฆฌํ๊ณ ์กฐํํ๋ ๊ธฐ๋ฅ๊ณผ ๋๋ถ์ด ์๋ง์ ๋ถ๊ฐ๊ธฐ๋ฅ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
- MessageSource : ๋ฉ์์ง ์์ค๋ฅผ ํ์ฉํ ๊ตญ์ ํ ๊ธฐ๋ฅ(๋๋ผ๋ณ ์ธ์ด ์ค์ )
- EnviromentCapable : ํ๊ฒฝ๋ณ์ ๊ธฐ๋ฅ, ๋ก์ปฌ - ๊ฐ๋ฐ - ์ด์๋ฑ์ ๊ตฌ๋ถํ์ฌ ์ฒ๋ฆฌ
- ApplicationEventPublisher : ์ฑ ์ด๋ฒคํธ, ์ด๋ฒคํธ๋ฅผ ๋ฐํํ๊ณ ๊ตฌ๋ ํ๋ ๋ชจ๋ธ์ ํธ๋ฆฌํ๊ฒ ์ง์
- ResourceLoader : ํธ๋ฆฌํ ๋ฆฌ์์ค ์กฐํ, ํ์ผ - ํด๋์คํจ์ค - ์ธ๋ถ๋ฑ์์ ๋ฆฌ์์ค๋ฅผ ํธ๋ฆฌํ๊ฒ ์กฐํ
@ ๊ฒฐ๋ก
- ApplicationContext๋ BeanFactory์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์์๋ฐ๋๋ค
- App..Context ๋ BeanFactory์ ๋น ๊ด๋ฆฌ ๊ธฐ๋ฅ + ๋ถ๊ฐ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- BeanFactory๋ฅผ ์ง์ ์ฌ์ฉํ ์ผ์ ์๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
- BeanFactory๋ App..Context ๋ ๋ค ์คํ๋ง ์ปจํ ์ด๋๋ผ๊ณ ๋ถ๋ฅธ๋ค.
# ๋ค์ํ ์ค์ ํ์ ์ง์ - Java, XML
์คํ๋ง ์ปจํ ์ด๋๋ ๋ค์ํ ํ์์ ์ค์ ์ ๋ณด๋ฅผ ๋ฐ์๋๋ฆด ์ ์๊ฒ ์ค๊ณ๋์ด ์๋ค. ๋ณดํต์ Java ์ฝ๋์ ์ด๋ ธํ ์ด์ (@)์ ์ฌ์ฉํ์ง๋ง ํ์ํ๋ค๋ฉด XML๋ฑ ๋ค๋ฅธ ๋ฐฉ์์ ์ฌ์ฉํด๋ ๋๋ค.
๋ฌผ๋ก ์คํ๋ง ๋ถํธ๊ฐ ๋์ค๋ฉฐ ์ด๋ ธํ ์ด์ ๋ฐฉ์ ๋ง๊ณ ๋ ๊ฑฐ์ ์ฌ์ฉํ์ง ์์ง๋ง, ์ ํ๋ก์ ํธ์ ๋ ๊ฑฐ์ ์ฝ๋๋ XML๋ก ์์ฑ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์์ผ๋ ์ด๋ฐ ๋ฐฉ๋ฒ์ด ์๋ค๋ ๊ฒ์ ์์๋ง ๋๊ณ ๋์ด๊ฐ๋๋ก ํ์. ํ์๋ง ๋ค๋ฅผ ๋ฟ ์ค์ ๋ฐฉ๋ฒ์ ๋น์ทํ๋ค.
public class XmlAppContext {
@Test
void xmlAppContext() {
// AppConfig.java ๊ฐ์ฒด ๋์ ์ appConfig.xml๋ฅผ ๋ฑ๋กํด์ฃผ๋ฉด ๋๋ค.
ApplicationContext ac = new
GenericXmlApplicationContext("appConfig.xml");
MemberService memberService = ac.getBean("memberService",
MemberService.class);
assertThat(memberService).isInstanceOf(MemberService.class);
}
}
appConfig.xml
<?xml version="1.0"encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://">
<bean id="memberService" class="hello.core.member.MemberServiceImpl">
<constructor-arg name="memberRepository" ref="memberRepository"/>
</bean>
<bean id="memberRepository"
class="hello.core.member.MemoryMemberRepository"/>
<bean id="orderService" class="hello.core.order.OrderServiceImpl">
<constructor-arg name="memberRepository" ref="memberRepository"/>
<constructor-arg name="discountPolicy" ref="discountPolicy"/>
</bean>
<bean id="discountPolicy" class="hello.core.discount.RateDiscountPolicy"/>
</beans>
# ์คํ๋ง ๋น ์ค์ ๋ฉํ ์ ๋ณด - BeanDefinition
์์์ ๋ณด๋ ๊ฒ ์ฒ๋ผ ์คํ๋ง ์ค์ ์ ์๋ฐ, XML, Groovy๋ฑ์ผ๋ก ๊ตฌํ์ฒด๋ฅผ ๋ฐ๊พธ๋๋ผ๋ ๋ค๋ฅธ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ค. ์คํ๋ง ์ปจํ ์ด๋๋ BeanDefinition์๋ง ์์กดํ๋๋ก ์ค๊ณ๋์ด ์๋ค. ์ฆ, ๋ด๊ฐ ์ง์ BeanDefinition ๊ตฌํ์ฒด๋ฅผ ๋ง๋ค์ด ์ง์ ์ ์ ํ ์ ์๋ค๋ ๊ฒ์ด๋ค. (๋ฌผ๋ก ์ค์ ๋ก ํ ์ผ์ ๊ฑฐ์ ์๋ค.)
์ฐ๋ฆฌ๊ฐ @Bean ๋๋ ์ ๊ฐ์ ์ค์ ์ ๋ณด ํ๋๋น, ํ๋์ ๋ฉํ์ ๋ณด๋ฅผ ์์ฑํ์ฌ BeanDefinition๋ฅผ ๋ง๋ ๋ค. ์คํ๋ง ์ปจํ ์ด๋๋ ์ค์ ์ค์ ์ ๋ณด๊ฐ ์๋ ์ด ๋ฉํ์ ๋ณด(BeanDefinition)๋ง์ ๋ณด๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์คํ๋ง ๋น์ ์์ฑํ๋ค.
@ BeanDefinition ๊ฐ์ฒด ํ๋
- BeanClassName: ์์ฑํ ๋น์ ํด๋์ค ๋ช (์๋ฐ ์ค์ ์ฒ๋ผ ํฉํ ๋ฆฌ ์ญํ ์ ๋น์ ์ฌ์ฉํ๋ฉด ์์)
- factoryBeanName: ํฉํ ๋ฆฌ ์ญํ ์ ๋น์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ด๋ฆ, ์) appConfig
- factoryMethodName: ๋น์ ์์ฑํ ํฉํ ๋ฆฌ ๋ฉ์๋ ์ง์ , ์) memberService
- Scope: ์ฑ๊ธํค(๊ธฐ๋ณธ๊ฐ)
- lazyInit: ์คํ๋ง ์ปจํ
์ด๋๋ฅผ ์์ฑํ ๋ ๋น์ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ, ์ค์ ๋น์ ์ฌ์ฉํ ๋ ๊น์ง ์ต๋ํ
์์ฑ์ ์ง์ฐ์ฒ๋ฆฌ ํ๋์ง ์ฌ๋ถ - InitMethodName: ๋น์ ์์ฑํ๊ณ , ์์กด๊ด๊ณ๋ฅผ ์ ์ฉํ ๋ค์ ํธ์ถ๋๋ ์ด๊ธฐํ ๋ฉ์๋ ๋ช
- DestroyMethodName: ๋น์ ์๋ช ์ฃผ๊ธฐ๊ฐ ๋๋์ ์ ๊ฑฐํ๊ธฐ ์ง์ ์ ํธ์ถ๋๋ ๋ฉ์๋ ๋ช
- Constructor arguments, Properties: ์์กด๊ด๊ณ ์ฃผ์
์์ ์ฌ์ฉํ๋ค. (์๋ฐ ์ค์ ์ฒ๋ผ ํฉํ ๋ฆฌ ์ญํ
์ ๋น์ ์ฌ์ฉํ๋ฉด ์์)
์ฌ์ค BeanDefinition์ ๋ด๋ถ๋ฅผ ์ ํ์๋ ๋ฑํ ์์ง๋ง, ์คํ๋ง ํ๋ ์์ํฌ ์ฝ๋๋ ์คํ๋ง ๊ด๋ จ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ณผ ๋ ์ข ์ข BeanDefiniton๋ฅผ ์ง์ ๊ตฌํํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ๊ทธ ๋ ํด๋น ์ฝ๋๊ฐ ์ด๋ค ์ฝ๋์ธ์ง ์ดํด๋ฅผ ๋๊ธฐ์ํด์ ๊ฐ๋จํ๊ฒ ์ค๋ช ํด๋ณด์๋ค.
'๐ฑ Spring Framework > Spring Core' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
#8 ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์์กด๊ด๊ณ ์๋์ฃผ์ (0) | 2021.08.02 |
---|---|
#7. ์คํ๋ง์ ์ฑ๊ธํค ์ปจํ ์ด๋ (@Configuration) (0) | 2021.08.02 |
#6. ์คํ๋ง ์ปจํ ์ด๋์ ์คํ๋ง ๋น (0) | 2021.08.02 |
#5 ์คํ๋ง์ผ๋ก ์ ํํ๊ธฐ (0) | 2021.08.02 |
IoC, DI, ๊ทธ๋ฆฌ๊ณ ์ปจํ ์ด๋ (0) | 2021.08.02 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev