[Spring] 의존성 주입 테스트(2)
업데이트:
코드에 사용된 어노테이션 정리
Chef클래스
package org.zerock.sample;
import org.springframework.stereotype.Component;
import lombok.Data;
@Component
@Data
public class Chef {
}
Restaurant클래스
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;
}
- Lombok 관련 어노테이션
- @Setter
- @Data
- @Log4j
- Spring 관련 어노테이션
- @Autowired
- @Component
- 테스트 관련 어노테이션
- @RunWith
- @ContextConfiguration
- @Test
Lombok 관련
Lombok은 컴파일 시 흔하게 코드를 작성하는 기능들을 완성해주는 라이브러리이다.
@Setter
@Setter 어노테이션은 Setter 메서드를 만들어주는 역할을 한다.
@Setter에는 3가지의 속성을 부여할 수 있다.
- value : 접근 제한 속성을 의미한다.
- onMethod : setter 메서드 생성 시 메서드에 추가할 어노테이션을 지정한다.
- onParam : setter 메서드의 파라미터에 어노테이션을 사용하는 경우에 적용한다.
@Data
@Data는 Lombok에서 가장 자주 사용되는 어노테이션이다.
@ToString, @EqualsAndHashCode, @Getter/@Setter, @RequiredArgsConstructor를 모두 결합한 형태로 한 번에 자주 사용되는 모든 메서드들을 생성할 수 있다는 장점이 있다.
세부적인 설정이 필요 없는 경우라면 @Data를 주로 이용한다.
@Log4j
@Log4j는 로그 객체를 생성한다.
Log4j 설정을 이용하고, Log4j가 존재하지 않을 경우에는 @Log를 이용할 수 있다.
@Log를 클래스 쪽에 붙여주면 내부적으로 static final로 Logger 객체가 생성되기 때문에 별도의 로그를 설정할 필요 없이 필요한 코드를 만들어 낼 수 있다.
Spring Legacy Project로 생성한 경우 기본적으로 Log4j 설정이 있기 때문에 추가적인 설정 없이 @Log4j만으로 로그 객체를 준비할 수 있다.
Spring 관련
@Component
@Component는 해당 클래스가 스프링에서 객체로 만들어서 관리하는 대상임을 명시한다.
@Autowired
자신이 특정한 객체의 의존적이므로 자신에게 해당 타입의 빈을 주입해주라는 의미이다.
필요한 객체가 존재하지 않는다면 스프링은 제대로 객체들을 구성할 수 없기 때문에 에러를 발생한다.
테스트 관련
@ContextConfiguration
@ContextConfiguration은 테스트 관련 어노테이션 중 가장 중요한 어노테이션이다.
스프링이 실행되면서 어떤 설정 정보를 읽어 들여야 하는지를 명시한다.
속성으로는 locations를 이용해서 문자열을 배열로 XML 설정 파일을 명시할 수 있고, classes 속성으로 @Configuration이 적용된 클래스를 지정해 줄 수도 있다.
@Runwith
테스트 시 필요한 클래스를 지정한다.
스프링은 SpringJUnit4ClassRunner 클래스가 대상이 된다.
@Test
junit에서 해당 메서드가 jUnit상에서 단위 테스트의 대상인지 알려준다.
단일 생성자의 묵시적 자동 주입
스프링의 의존성 주입은 생성자 주입과 Setter 주입을 사용한다.
Setter
주입은 앞의 예제와 같이 setXXX()와 같은 메서드를 작성하고 @Autowired와 같은 어노테이션을 통해서 스프링으로부터 자신이 필요한 객체를 주입하도록 한다.
생성자
주입의 경우 객체 생성 시 의존성 주입이 필요하므로 좀 더 엄격하게 의존성 주입을 체크하는 장점이 있다.
기존에 스프링에서는 생성자 주입을 하기 위해서 생성자를 정의하고, @Autowired오 ㅏ같은 어노테이션을 추가해야만 생성자 주입이 이뤄졌지만 스프링 4.3 이후에는 묵시적으로 생성자 주입이 가능하다.
관련 서적 : 코드로 배우는 스프링 웹 프로젝트
공유하기
Twitter Google+ LinkedIn
댓글남기기