[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 클래스를 생성한다.
일반적으로 스프링에서 의존성 주입은 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으로 생성된 클래스에 대한 정보는 이클립스를 통해서 확인할 수 있다.
XML을 이용하는 의존성 주입 설정
스프링에서 관리되는 객체를 흔히 빈(Bean)
이라 하고, 이에 대한 설정은 XML과 Java를 이용해서 처리할 수 있다.
기존의 시스템은 아직까지는 XML 방식을 선호하지만, 최근 몇 년 동안 스프링과 관련된 자료를 검색해보면 Java를 이용하는 설정도 많이 사용되고 있다. STS의 ‘Spring Legacy Project’의 경우 기본적으로 XML을 이용해서 스프링에서 관리해야 하는 객체들을 처리한다.
프로젝트의 src 폴더 내에 root-context.xml
은 스프링 프레임워크에서 관리해야 하는 객체를 설정하는 설정 파일이다.
여기서 ‘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
항목을 체크한다.
그리고 source
탭을 선택해 아래의 코드를 추가한다.
<context:component-scan base-package="org.zerock.sample"></context:component-scan>
위의 xml을 저장하고 이번에 Bean Graph
탭을 선택해서 객체를 확인해야하는데 ‘Bean Graph’ 탭이 존재하지..않았다..^^ 그래서 또 검색 검색…. 해결 방법은 그래도 간단했다.
- root-context.xml 우클릭
- 스프링 > add as bean configuration 클릭하면 된다.
이렇게 확인되면 성공!
- 참고 : 코드로 배우는 스프링 웹 프로젝트
댓글남기기