๐[Spring] DI ์ค์ ๋ฐฉ์์ ๋ํด์โฆ
DI๋?
DI
๋ Dependency Injection์ ์ฝ์๋ก, ์์กด๊ด๊ณ ์ฃผ์
์ ์๋ฏธํ๋ค.
์์กด๊ด๊ณ๋ฅผ ์ฃผ์
ํจ์ผ๋ก์จ ๊ฐ์ฒด๊ฐ์ ์์กด๊ด๊ณ๋ฅผ ์์ฑํ๋ค.
์ด ๋, ์คํ๋ง์ ๋ฐํ์ ์์ ์ฌ์ฉํ ๊ฐ์ฒด๋ค์ ์์กด๊ด๊ณ๋ฅผ ๋ถ์ฌํ์ฌ ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๋ค.
DI ์ค์ ๋ฐฉ์
DI๋ฅผ ์ค์ ํ๋ ๋ฐฉ์์ XML, JAVA, ์ ๋
ธํ
์ด์
์ค์ ๋ฐฉ์์ผ๋ก 3๊ฐ์ง ๋ฐฉ์์ด ์๋ค.
์ด๊ฑด DI๋ฅผ ์ค์ ํ๋ ๋ฐฉ์์ด๊ณ , DI๋ฅผ ํ๋ ๋ฐฉ์(์์กด๊ด๊ณ๋ฅผ ์ฃผ์
ํ๋ ๋ฐฉ์)์๋ ์์ฑ์ ๊ธฐ๋ฐ ์ฃผ์
๊ณผ ์ค์ ์ ๊ธฐ๋ฐ ์ฃผ์
์ 2๊ฐ์ง ๋ฐฉ์์ด ์กด์ฌํ๋ค.
XML ์ค์ ๋ฐฉ์
๊ฐ์ฅ ์ ํต์ ์ธ DI ์ค์ ๋ฐฉ์์ผ๋ก, XMLํ์ผ์ ํตํด ๋น์ ์ ์ํ๊ณ , ์์กด๊ด๊ณ๋ฅผ ์ค์ ํ๋ค.
[์์]
<bean id="myBean" class="com.example.MyBean">
<constructor-arg ref="myDependency"/>
</bean>
<bean id="myDependency" class="com.example.MyDependency"/>
JAVA ๊ธฐ๋ฐ ์ค์ ๋ฐฉ์
XML ์ค์ ์ฝ๋๋ฅผ Java ์ฝ๋๋ก ๋์ฒดํ๋ ๋ฐฉ์์ด๋ค.
@Configuration
์ ๋
ธํ
์ด์
์ผ๋ก ์ค์ ํด๋์ค๋ฅผ ์ง์ ํ๊ณ , @Bean
์ ๋
ธํ
์ด์
์ผ๋ก ๋น์ ์ ์ ๋ฐ ์์กด๊ด๊ณ๋ฅผ ์ค์ ํ๋ค.
[์์]
@Configuration
public class MyConfiguration {
@Bean
public MyBean myBean(MyDependency myDependency) {
return new MyBean(myDependency);
}
@Bean
public MyDependency myDependency() {
return new MyDependency();
}
}
์ ๋ ธํ ์ด์ ๋ฐฉ์
์ ๋
ธํ
์ด์
๋ฐฉ์์ ์ ๋
ธํ
์ด์
์ ์ฌ์ฉํด ์์กด๊ด๊ณ๋ฅผ ์ฃผ์
ํ๋ ๋ฐฉ์์ด๋ค.
์ด ๋๋ <context:component-scan>
ํ๊ทธ๋ฅผ ์ด์ฉํ๋ค.
[ApplicationContext.xml]
<beans xmlns="~">
...
<context:component-scan base-package="com.example.MyBean">
</context:component-scan>
</beans>
XML ์ค์ ๊ณผ JAVA ์ค์ ์ ๋์นํด๋ณด์.
์์กด๊ด๊ณ ์ฃผ์
์๋ ์์ฑ์ ๊ธฐ๋ฐ ์ฃผ์
๋ฐฉ์
๊ณผ ์ค์ ์ ๊ธฐ๋ฐ ์ฃผ์
๋ฐฉ์
์ 2๊ฐ์ง ๋ฐฉ์์ด ์๋ค.
์์ฑ์ ๊ธฐ๋ฐ ์ฃผ์
[applicationContext.xml]
<bean id="memberDAO" class="org.korea.di.persistence.MemberDAOImpl"></bean>
<bean id="memberService" class="org.korea.di.service.MemberServiceImpl"></bean>
<constructor-arg ref="memberDAO">
</bean>
- ๋น์ ํด๋น ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด์์ ๊ฐ์ ธ์ด(MemberDAO๊ฐ ์๋ MemberDAOImpl)
- ์์ฑ์ ๊ธฐ๋ฐ ์ฃผ์
์
<consturctor-arg ref="memberDAO"/>
์ ๊ฐ์ด<constructor-arg/>
ํ๊ทธ๊ฐ ์ฌ์ฉ๋๋ค.
[MemberServiceImpl.java]
public class MemberServiceImpl implements MemberService {
private MemberDAO memberDAO;
// ์์ฑ์ ์ ์
public MemberServiceImpl(MemberDAO memberDAO) {
this.memberDAO = memberDAO;
}
...
}
์ค์ ์(setter) ๊ธฐ๋ฐ ์ฃผ์
[applicationContext.xml]
<bean id="memberDAO" class="org.tukorea.di.persistence.MemberDAOImpl"></bean>
<bean id="memberService" class="org.tukorea.di.service.MemberServiceImpl">
<property name="memberDAO" ref="memberDAO"/>
</bean>
- ์ค์ ์ ๊ธฐ๋ฐ ์ฃผ์
์
<property name="memberDAO" ref="memberDAO"/>
์ ๊ฐ์ด<property>
ํ๊ทธ์name
์์ฑ์ด ์ฌ์ฉ๋๋ค.
[MemberService.java]
public class MemberServiceImpl implements MemberService {
private MemberDAO memberDAO;
// ์ค์ ์ ์ ์
public setMemberDAO(MemberDAO memberDAO) {
this.memberDAO = memberDAO;
}
...
}
๋๊ธ๋จ๊ธฐ๊ธฐ