빈의 설정 정보 관리 파일이 xml이라고 보면
xml에서는
<bean id ="UserDAO" class="net.javajigi.user.dao.MySQLUserDAO" />
<bean id="userService" class="net.javajigi.user.service.UserServiceImple">
<property name="userDAO">
<ref local="userDAO"/>
</property>
</bean>
이런식으로 설정이 되어 있다.
실제 소스에서는
public class UserServiceImpl implements USerService {
private UserDAO userDAO;
public void setUserDao(UserDao newUSerDAO) {
this.userDAO = newUSERDAO;
}
int result = userDAO.insert(user);
...
이처럼 UserDAO에 대한 정의나 생성이 아무것도 없이 사용 할 수 있는데 xml에 설정되어 있기 때문이다.
bean태그 아래 property 태그의 이름이 userDAO라면 위 예제 클래스의 setUserDAO를 통하여 자동으로
xml에서 설정되어 있는 MySQLUSerDAO의 객체를 해당 인스턴스에 전달하게 되는 것이다.
이렇게 의존관계가 형성될 때 setter메소드를 이용하는 것을 Setter Injection이라고 한다.
그렇다면 Construcetor Injection은?
public UserServiceImpl (UserDAO newUserDAO) {
this.userDAO = newUSerDao;
}
<bean id=....>
<constructor-arg>
<ref local="userDAO" />
</constructor-arg>
</bean>
이렇게..사용된다