스프링 프레임워크가 가지는 가장 핵심적인 기능은 IOC(Inversion Of Control)입니다. 그중에서 DI(Dependency Injection)는 스프링 프레임워크에서 지원하는 IOC의 한 형태입니다.
DI는 클래스 사이의 의존관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동적으로 연결해 주는 것을 말합니다. 컨테이너가 의존관계를 자동적으로 연결시켜 주기때문에 컨테이너 API에 종속되는 것을 줄일 수 있습니다.
의존관계를 설정하는 방식으로는 자주 쓰이는 것들에는 생성자 방식(Constructor Injection), 프로퍼티 설정 방식(Setter Injection) 등이 있습니다.
1. 생성자 방식
UserServiceImpl.java
public class UserServiceImpl implements UserService {
private UserDAO userDAO;
public UserServiceImpl(UserDAO newUserDAO) {
this.userDAO = newUserDAO;
}
...
}
<bean id="userDAO" class="yoyojyv.dao.MySQLUserDAO"/>
<bean id="userService" class="yoyojyv.service.UserServiceImpl">
<constructor-arg>
<ref bean="userDAO"/>
</constructor-arg>
</bean>
UserServiceImpl.java 의 생성자와 applicationContext.xml 의 3~5번째줄의 <constructor-arg>태그를 이용하여 의존하는 객체를 전달 할 수 있습니다.
<constructor-arg ref="userDAO"/ >
2. 프로퍼티 설정 방식
UserServiceImpl.java
public class UserServiceImpl implements UserService {
private UserDAO userDAO;
public void setUseDAO(UserDAO newUserDAO) {
this.userDAO = newUserDAO;
}
....
}
<bean id="userDAO" class="yoyojyv.dao.MySQLUserDAO"/>
<bean id="userService" class="yoyojyv.service.UserServiceImpl">
<property name="userDAO">
<ref bean="userDAO"/>
</property>
</bean>
UserServiceImpl.java 의 3~5번째줄의 setter메소드와 applicationContext.xml 의 3~5번째줄의 <property>태그를 이용하여 의존하는 객체를 전달 할 수 있습니다.
나머지 방식들과 IoC container에관한 내용은 여기(The Spring Framework - Reference Documentation)<-- 에서 확인 하세요~