1️⃣ 생성자 주입 (Constructor Injection)

  • 생성자를 이용한 의존관계 설정
  • 클래스에 생성자를 지정해야 된다.
  • 의존하는 객체를 생성자를 통해서 전달한다
  • 방법
    1. 의존하는 객체를 전달받을 생성자를 작성한다.
    2. 설정파일에  <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 메소드를 통해서 전달한다.
  • 순서
    1. 의존하는 객체를 전달받을 setter 메소드를 작성한다.
    2. 설정파일에 <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
xoo | 수진