src/main/java 작성되는 코드의 경로
src/main/resource 실행할 때 참고하는 기본 경로(설정 파일)
src/test/java 테스트 코드를 넣는 경로
src/test/resource 테스트 관련 설정 파일 보관 경로
src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml
src/main/webapp/WEB-INF/spring/root-context.xml
WEB_INF/web.xml
src/main/webapp/WEB_INF/views
ex00/pom.xml
ex00은 프로젝트 이름이다.
호텔, 레스토랑 안에 셰프 객체를 주입하는 예제
생성자, setter 메소드를 이용한 주입으로 의존성 주입 구현
설정 방식은 XML이나 어노테이션을 이용해서 처리.
Chef 클래스를 하나 먼저 만들어준다.
package com.koreait.sample; //스프링에게 해당 클래스가 스프링에서 관리해야 하는 대상임을 표시 @Component //Lombok의 setter, getter, 생성자, toString() 등을 자동으로 생성해주는 어노테이션 @Data public class Chef { }
그 이후엔 Hotel 클래스와 Restaurant 클래스를 만들어준뒤에
생성자, setter 메소드를 이용한 주입으로 의존성 주입을 구현한다.package com.koreait.sample; //인스턴스 변수로 선언된 모든 것을 파라미터로 받는 생성자를 작성한다. //@AllArgsConstructor //특정 변수에 대해서만 생성자를 작성할 때 사용한다. @NonNull 이나 final이 붙은 인스턴스 변수에 대한 생성자를 만들어 낸다. @RequiredArgsConstructor @Component @Setter @Getter @ToString public class Hotel { @NonNull Chef chef; int data; }
package com.koreait.sample; //인스턴스 변수로 선언된 모든 것을 파라미터로 받는 생성자를 작성한다. @AllArgsConstructor @Component @Setter @Getter public class Restaurant { @Setter(onMethod_ = @Autowired) Chef chef; }
스프링 프레임워크가 시작되면서 먼저 스프링이 사용하는 메모리 영역을 만든다.
스프링 내부적으로 ApplicationContext라는 이름의 객체가 만들어진다.
스프링은 자신이 생성하고 관리해야 하는 객체들에 대한 설정을 알아야 하고
이 설정파일은 root-context.xml 이라는 파일로 만들어져 있다.
root-context.xml에 설정되어 있는 <context:component-scan>
태그의 내용을 통해서 com.koreait.sample 패키지를 스캔하기 시작한다.
해당 패키지에 있는 클래스들 중에서 스프링이 사용하는 @Component라는
어노테이션이 존재하는 클래스의 인스턴스를 생성한다. Restaurant 객체는
Chef 객체가 필요하다는 어노테이션(@Autowired) 설정이 있으므로
Chef 객체의 레퍼런스를 Restaurant 객체에 주입한다.
자바 프로그래밍 언어용 유닛 테스트 프레임워크
가장 많이 사용되는 테스트 환경
테스트 성공시 JUnit GUI 창에 녹색으로 표시 / 실패시 적색으로 표시
하나하나의 케이스별로(단위로 나누어서) 테스트를 하는 단위 테스트 도구
1. 테스트 클래스 위쪽에 어노테이션 추가
@RunWith(SpringJUnit4ClassRunner.class)
2. 내부에 테스트용 메소드 선언
내용은 우리가 테스트 해볼 로직으로 구현
3. 테스트용 메소드 위에 어노테이션 추가
@Test
package com.koreait.sample;
/*
spring-test 모듈을 이용해서 간단하게 스프링을 가동시키고 스프링 동작을 활성화한다.
반드시 JUnit 4.10 이상 버전을 사용
*/
@RunWith(SpringJUnit4ClassRunner.class)
//지정된 클래스나 문자열을 이용해서 필요한 객체들을 스프링 내에 객체로 등록
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class HotelTests {
@Setter(onMethod_ = @Autowired)
private Hotel hotel;
//JUnit에서 테스트 대상임을 표시
@Test
public void testExist() {
//hotel 객체가 null이 아니어야만 테스트를 통과
assertNotNull(hotel);
log.info(hotel);
log.info(hotel.getChef());
}
//1. 테스트 코드가 실행되기 위해서 스프링 프레임워크가 동작
//2. 동작되는 과정에서 필요한 객체들이 스프링에 등록
//3. 의존성 주입이 필요한 객체는 자동으로 주입이 이루어짐
}
테스트 결과