본문으로 바로가기


▶의존성 주입 테스트 

스프링에서는 생성자를 이용한 주입과 sertter메서드를 이용한 주입으로 의존성주입을 구현함. 설정 방식은 주로 xml,어노테이션으로 처리한다 .

예제 

1.Lombok을 이용해서  setter메서드를 자동으로 구현되도록 할 것 

 2.스프링 동작 테스트

그러므로 pom.xml에서 Lombok 라이브러리를 추가하고 spring-test라이브러리를 이용.

-그림-


예제를 위한 설정 

<!--예제를 위한  추가 코드   -->

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!--lombok  -->
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.0</version>
            <scope>provided</scope>
        </dependency>
cs

junit4.12로 변경 (스프링 4.x이상의 버전을 테스트하기 위해서는 반드시 junit의 버전은 4.10이상을 이용해야함)


1
2
3
4
5
6
7
8
        <!-- Test -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>    
        

c



▶예제 클래스 생성

우선 ex00프로젝트에 org.zerock.sample 패키지 생성 하고 그안에 Chef , Restaurant 클래스 생성 

Chef를 인터페이스로 하는 것이 최소한 좋지만 ,지금은 최소한의 코드로만 의존성 주입 테스트 이기에 그냥 클래스로 설계함. 

-Chef 클래스

1
2
3
4
5
6
7
8
9
10
11
12
13
package org.zeorck.sample;
 
import org.springframework.stereotype.Component;
 
import lombok.Data;
 
@Component
@Data
 
public class Chef {
 
}
 
cs


Restaurant클래스는 Chef를 주입 받도록 설계합니다.이때 Lombok의 setter,생성자,tostring 등을 자동으로 생성하기위해 @Data어노테이션이용



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import org.springframework.beans.factory.annotation.Autowired;
 
import org.springframework.stereotype.Component;
 
 
 
import lombok.Data;
 
import lombok.Setter;
 
 
 
@Component
 
@Data
 
public class Restaurant {
 
 
 
    @Setter(onMethod_=@Autowired)
 
    private Chef chef;
 
}
 
 
cs


 작성된 코드가 의미하는 것은 (Restaurant 클래스  의미) = Restaurant 객체는 Chef타입의 객체를 필요로 한다는 상황.

@Component =스프링에게 해당 클래스가 스프링에서 관리해야 하는 대상입을 표시하는 어노테이션.

@Setter는 자동으로 setChef()를 컴파일 시 생성합니다.

@Setter에서 사용된  onMethod속성은 생성되는 setChef()에 @Autowired어노테이션을 추가하도록함.

Lombok으로 생성된 클래스에 대한 정보는 이클립스를 통해서 확인가능.



▶xml을 이용하는 의존성 주입 설정

(스프링은 클래스 에서 객체를 생성하고  객체들의 의존성에 대한 처리 작업까지 내부에서 모든것을 처리한다 .스프링에서 과닐되는 객체는  빈이라고 하고 이에대한 설정은 자바와 xml 두가지 방식이 있다 /sts의 spring Legacy Project의 경우 기본적으로 xml 을 이용해서 스프링에서 관리해야하는 객체들을 처리함. 

)

-프로젝트의src 폴더 내에 'root-context.xml'은 스프링  프레임워크에서 관리해야하는 객체(이러한 객체를 빈(Bean)라고 표현함)를 설정하는 설정파일.


'root-context.xml'을 클릭하면 아래쪽에 'NameSpaces'누르고,'context'항목체크.


source 텝을 누르고 아래코드 추가 

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    
    <!-- Root Context: defines shared resources visible to all other web components -->
        
        //이 부분 추가해주세요
        <context:component-scan base-package="org.zeorck.sample"></context:component-scan>
</beans>
 
cs

저장 후 'Bean Graph'탭을 보면 Restaurant와 Chef객체가 설정된 것을 확인 할 수 있다.



만약 java로 설정하고 싶은 경우


-JAVA설정을 이용하는 의존성 주입


java설정을 이용하는 경우에 'root-context.xml'대신하는것은 RootConfig클래스를 이용.

xml로 설정된 내용은 RootConfig에서 @ConponentScan어노테이션을 이용해서 처리할 수 있다.


jex00의RooConfig클래스


1
2
3
4
5
6
7
8
9
10
11
12
package org.zeorck.config;
 
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
 
@Configuration
//xml대신하는 클래스 (xml 대신 설정 파일을  직접 만듬 )/@Configuration= 해당클래스의 인스턴스를 이용해서 설정 파일을 대신함 
@ComponentScan(basePackages = {"org.zeorck.sample"})
public class RootConfig {
 
}
 
cs