티스토리 뷰

It

Dependency Injection 3-3 Dependency Injection

IT eoeo25 2022. 8. 15. 15:37

3-3 (Dependency Injection) - Dependency Injection

개념

Bean 사이의 의존관계 설정을 XML 설정파일에 등록된 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것

컨테이너가 Bean에 필요한 객체를 넘겨줘서 사용함.

Constructor Injection, Setter Injection

장점

프레임워크에 독립적인 코드 작성 가능

Dependency 변경시에 프로그램 코드를 수정하지 않고도 XML 설정 파일의 수정만으로 변경 사항 적용 가능

단점

Spring 내부에 등록된 Bean 끼리만 의존성 설정 가능

Constructor Injection

Spring은 기본적으로 기본 생성자(Default Constructor)를 이용해 객체를 생성함. 하지만

생성자의 매개변수로 Dependency 설정 내용을 넘겨주는 방법

매개변수가 있는 생성자 필요

public class UserServiceImpl implements UserService {

private UserDAO userDAO;

public UserServiceImpl(UserDAO userDAO) {

this.userDAO = userDAO;

}

}

<bean id="userService" class="com.multicampus.biz.user.impl.UserServiceImpl">

<constructor-arg ref="userDAO" />

</bean>

<bean id="userDAO" class="com.multicampus.biz.user.impl.UserDAO" />

매개변수 Type 매핑

public class UserVO {

private String userName;

private int age;

public UserVO(String userName, int age) {

this.userName = userName;

this.age = age;

}

}

<bean id="userVO" class="com.multicampus.biz.user.vo.UserVO">

<constructor-arg index="0" value="홍길동" />

<constructor-arg index="1" value="17" />

</bean>

Setter Injection

Bean이 가지고 있는 Setter 메서드를 호출하여 Dependency 주입함.

public class UserServiceImpl implements UserService {

private UserDAO userDAO;

public void setUserDAO(UserDAO userDAO) {

System.out.println("setUserDAO() 메소드 호출");

this.userDAO = userDAO;

}

}

<bean id="userService" class="com.multicampus.biz.user.impl.UserServiceImpl">

<property name="userDAO" ref="userDAO" />

</bean>

<bean id="userDAO" class="com.multicampus.biz.user.impl.UserDAO" />

집합 객체 설정

List, Map 과 같은 Collection 객체를 주입할 수 있음.

List 타입 매핑

public class CollectionBean {

private List<String> addressList;

public void setAddressList(List<String> addressList){

this.addressList = addressList;

}

}

<bean id="collectionBean" class="com.multicampus.ioc.injection.CollectionBean">

<property name="addressList">

<list>

<value>서울시 강남구 역삼동</value>

<value>서울시 성동구 성수동</value>

</list>

</property>

</bean>

Map 타입 매핑

public class HandlerMapping {

private Map<String, Controller> mappings;

public void setMappings(Map<String, Controller> mappings){

this.mappings = mappings;

}

}

<bean id="handlerMapping" class="com.multicampus.ioc.injection.HandlerMapping">

<property name="mappings">

<map>

<entry>

<key><value>login</value></key>

<ref bean="loginController"/>

</entry>

<entry>

<key><value>logout</value></key>

<ref bean="logoutController"/>

</entry>

</map>

</property>

</bean>

<bean id="loinController" class="com.multicampus.system.LoginController" />

<bean id="logoutController" class="com.multicampus.system.LogoutController /">

'It' 카테고리의 다른 글

명령어 세트  (0) 2022.08.16
명령어 파이프라이닝  (0) 2022.08.16
명령어 실행  (0) 2022.08.16
Spring AOP 4-1 AOP  (0) 2022.08.15
Dependency Injection 3-4 Annotation 기반 설정  (0) 2022.08.15