1️⃣ 생성자 주입 (Constructor Injection)
- 생성자를 이용한 의존관계 설정
- 클래스에 생성자를 지정해야 된다.
- 의존하는 객체를 생성자를 통해서 전달한다
- 방법
- 의존하는 객체를 전달받을 생성자를 작성한다.
- 설정파일에 <constructor-arg> 태그를 이용하여 설정한다.
- 문자열이나 기본 데이터인 경우에는 <ref> 태그를 사용
- 객체인 경우에는 <value> 태그를 사용
이전방식>
UserService service = new UserService(10); //생성자
// service.num = 10; //직접접근 (권장안함)
service.setNum(10); //set메서드
스프링의 생성자 이용 방식 (Constructor-based Dependency Injection) >
[하나의 파라미터]
<!-- [파라미터 한 개] -->
<bean id="xxx" class="com.service.UserService">
<!-- ⇒ UserService xxx = new UserService(); 와 동일-->
<bean id="xxx" class="com.service.UserService">
<constructor-arg value="10" />
</bean>
<!-- ⇒ UserService xxx = new UserService(10); 와 동일-->
[두 개 이상의 파라미터]
<!-- [파라미터 두 개] -->
public UserService(int num, String name) {}
<bean id="service" class="com.service.UserService">
<constructor-arg type="int" value="10" />
<constructor-arg value="홍길동" />
</bean>
<!-- ⇒ UserService xxx = new UserService(10, “홍길동”); 와 동일-->
[ index ]
<!-- 순서가 바뀌어 데이터타입이 안맞을경우엔 index로 특정순서 지정 -->
<bean id="yyy2" class="com.service.UserService2">
<constructor-arg index="1" value="홍길동" />
<constructor-arg index="0" value="10" />
</bean>
[ name 생성자파라미터명 ]
<!-- name 생성자 파라미터명 -->
<!-- 가독성이 좋아 가장 많이 쓴다 -->
<bean id="yyy3" class="com.service.UserService2">
<constructor-arg name="username" value="10" />
<constructor-arg name="num" value="홍길동" />
</bean>
[ 주입할 데이터 값이 기본형(int, float..)과 문자열인 경우 ]
<constructor-arg value=”기본값|문자열” />
[ 주입할 데이터 값이 참조형(문자열 제외)인 경우 : ref ]
이전방식>
UserService3, UserDAO
public class UserService3 {
UserDAO dao; //주입받을 데이터가 기본값이 아닌 클래스
public UserService3(UserDAO dao){
this.dao = dao;
}
}
스프링 방식>
<!-- UserDao dao = new UserDAO(); -->
<bean id="dao" class="com.dao.UserDAO" />
<!-- UserService3 service = new UserService3(dao); -->
<bean id="service" class="com.service.UserService3" >
<constructor-arg ref="dao" />
</bean>
2️⃣ set 메서드 이용 방식 ( Setter-based Dependency injection)
- setXXX 메소드를 이용한 의존관계 설정 방식
- 클래스에 set 메소드를 지정해야 된다.
- 의존하는 객체를 set 메소드를 통해서 전달한다.
- 순서
- 의존하는 객체를 전달받을 setter 메소드를 작성한다.
- 설정파일에 <property> 태그를 이용하여 설정한다.
- 문자열이나 기본 데이터인 경우에는 <value> 태그를 사용.
- 객체인 경우에는 <ref> 태그를 사용한다.
이전방식>
UserService service = new UserService(10); //생성자
service.setNum(10); //set메서드
스프링 방식> property
<bean id="service" class="com.service.UserService" >
<property name="num" value="10" /> <!--num은 setNum 메서드를 찾음-->
</bean>
3️⃣ 스프링에서 컬렉션 의존성 주입 (프로퍼티)
- list 주입
- 자바코드 : List<Cat> catList;
- xml
<property name="">
<list>
<ref bean="값1" />
<ref bean="값2" />
</list>
</property>
- set 주입
- 자바코드: Set<Cat> catSet;
- xml
<property name="catSet">
<set>
<ref bean="값1" />
<ref bean="값2" />
</set>
</property>
- map 주입
- 자바코드: Map<String,Cat> catMap;
- xml
<property name="catMap">
<map>
<entry key="" value-ref="값" />
<entry key="">
<ref bean="값" />
</entry>
</map>
</property>
- props 주입 ⇒ key/value 쌍으로 저장, 저장하는 value값이 무조건 문자열이다.
- 자바코드: Properties xxx;
- xml
<property name="xxx">
<props>
<prop key="키">문자열값</prop>
</props>
</property>
'Framework > SPRING FRAMEWORK' 카테고리의 다른 글
03. DI_constructor_두 개 이상의 파라미터 (0) | 2023.08.28 |
---|---|
03. DI_constructor (0) | 2023.08.28 |
DI (Dependency injection) (0) | 2023.08.28 |
ApplicationContext 계층구조 (0) | 2023.08.28 |
02. 빈 얻기 (0) | 2023.08.26 |