객체 간의 의존관계를 자신이 아닌 외부의 조립기가 수행한다. 제어의 역행(Inversion of Control)이란 의미로 사용된다. DI를 통해 시스템에 있는 각 객체를 조정하는 외부 개체가 객체들에게 생성시 의존관계가 주어진다.
느슨한 결합(loose coupling)으로 객체를 변화시키며, 느슨한 결합시에 객체는 인터페이스에 의한 의존 관계만을 알고 있어 구현 클래스에 대한 차이를 모르는 채 서로 다른 구현으로 대체가 가능하다.
스프링 설정 파일을 통해 객체 간의 의존관계를 설정할 수 있으며, 스프링 컨테이너가 제공하는 API를 이용해 객체를 사용할 수 있다.
<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://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="memberDao" class="com.test.hello.dao.MemberDaoImpl"></bean>
<bean id="memberService" class="com.test.hello.service.MemberServiceImpl" scope="prototype">
<property name="memberDao" ref="memberDao"></property>
</bean>
</beans>
ApplicationContext.xml
@Component
public class MemberServiceImpl implements MemberService {
@Autowired
private MemberDao memberDao;
@Override
public int registerMember(MemberDto memberDto) {
return memberDao.registerMember(memberDto);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:component-scan base-package="com.test.hello.*" />
</beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
</beans>
applicationContext.xml
<bean id="memberDao" class="com.test.hello.dao.MemberDaoImpl"></bean>
<bean id="memberService" class="com.test.hello.service.MemberServiceImpl" scope="prototype">
<property name="memberDao" ref="memberDao"></property>
</bean>
applicationContext.xml
ApplicationContext context =
new ClassPathXmlApplicationContext("com/ssafy/hello/di5/annotation/applicationContext.xml");
CommonService memberService = context.getBean("memberServcie", MemberService.class);
CommonService adminService = context.getBean("adminService", AdminService.class);
객체 또는 값을 통해 생성자를 주입받는다.
<constructor-arg> : <bean>의 하위태그로 설정한 bean 객체 또는 값을 생성자를 통해 주입하도록 설정
설정법 : <ref>, <value>와 같은 하위태그를 이용하여 설정하거나 속성을 이용하여 설정함.
하위 태그 이용
속성 이용
<ref>, <value>와 같은 하위태그를 이용해 설정하거나 속성을 이용하여 설정한다.
<constructor-arg> 또는 <property>의 하위 태그로 Collection 값을 설정하는 태그를 이용해 값 주입