[spring] 의존성 주입 테스트

업데이트:


설정

pom.xml에 라이브러리를 추가한다.

<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>



컨트롤 + f를 눌러서 Log4j를 찾아 버전을 1.2.15에서 1.2.17 버전으로 변경한다.

<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>



이번에는 junit을 검색해 버전을 4.12로 변경한다.

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>






예제 클래스 생성

ex00 프로젝트에 ‘org.zerock.sample’ 패키지를 생성하고, Restaurant 클래스와 Chef 클래스를 생성한다.

예제클래스1


일반적으로 스프링에서 의존성 주입은 Chef 클래스가 아닌 인터페이스로 설계하는 것이 좋지만, 지금은 최소한의 코드만을 이용해서 의존성 주입을 테스트해보기 위한 것이므로 클래스로 설계한다.


Chef 클래스를 다음과 같이 작성한다.

package org.zerock.sample;

import org.springframework.stereotype.Component;
import lombok.Data;

@Component
@Data
public class Chef {
	
}


Restaurant 클래스는 Chef를 주입받도록 설계한다. 이때 Lombok의 setter를 생성하는 기능과 생성자, toString() 등을 자동으로 생성하도록 @Data 어노테이션을 사용한다.

package org.zerock.sample;

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;
}


@Component는 스프링에게 해당 클래스가 스프링에서 관리해야 하는 대상임을 표시하는 어노테이션이고, @Setter는 자동으로 setChef()를 컴파일 시 생성한다.



@Setter에서 사용된 onMethod 속성은 생성되는 setChef()에 @Autowired 어노테이션을 추가하도록 한다. Lombok으로 생성된 클래스에 대한 정보는 이클립스를 통해서 확인할 수 있다.

예제클래스2






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

스프링에서 관리되는 객체를 흔히 빈(Bean)이라 하고, 이에 대한 설정은 XML과 Java를 이용해서 처리할 수 있다.
기존의 시스템은 아직까지는 XML 방식을 선호하지만, 최근 몇 년 동안 스프링과 관련된 자료를 검색해보면 Java를 이용하는 설정도 많이 사용되고 있다. STS의 ‘Spring Legacy Project’의 경우 기본적으로 XML을 이용해서 스프링에서 관리해야 하는 객체들을 처리한다.
프로젝트의 src 폴더 내에 root-context.xml은 스프링 프레임워크에서 관리해야 하는 객체를 설정하는 설정 파일이다.


예제클래스3


여기서 ‘root-context.xml’파일을 클릭해 NameSpaces 탭을 클릭해야하는데 나는 보이지 않았다. 다른 해결 방법은 root-context.xml 파일 우클릭 > Open With.. > spring config editor로 열기 하면 된다하는데 나는 spring config editor가 없어서 결국 기존 스프링을 STS.exe 3.9.12 버전으로 다시 설치하니 NameSpaces가 생겼다..^^

허허 NameSpaces가 생기긴 했는데 이번에는 위에서 만든 Restaurant에서 onMethod_에 에러가 발생했다.

다시 .m2(c드라이브>사용자>uesr) 파일을 삭제하고 STS를 다시 실행 후 프로젝트 우클릭 > Maven > Update Pjoect 로 해결했다.



root-context.xml 아래쪽에 NameSpaces라는 탭을 클릭해 context 항목을 체크한다.

예제클래스4


그리고 source 탭을 선택해 아래의 코드를 추가한다.

<context:component-scan base-package="org.zerock.sample"></context:component-scan>


위의 xml을 저장하고 이번에 Bean Graph 탭을 선택해서 객체를 확인해야하는데 ‘Bean Graph’ 탭이 존재하지..않았다..^^ 그래서 또 검색 검색…. 해결 방법은 그래도 간단했다.

  • root-context.xml 우클릭
  • 스프링 > add as bean configuration 클릭하면 된다.


예제클래스5

이렇게 확인되면 성공!





  • 참고 : 코드로 배우는 스프링 웹 프로젝트

태그:

카테고리:

업데이트:

댓글남기기