▶의존성 주입 테스트
스프링에서는 생성자를 이용한 주입과 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> |
▶예제 클래스 생성
우선 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 |
'코드로배우는 스프링 웹 프로젝트 ' 카테고리의 다른 글
이거부터!! 버전 부터 맞추고 (0) | 2018.12.07 |
---|---|
스프링의 특징과 의존성 주입2-3 (0) | 2018.10.20 |
스프링의 특징과 의존성 주입1-2 (0) | 2018.10.20 |
JAVA Configuration을 하는경우 2가지 (0) | 2018.10.19 |
Lombok라이브러리 설치 (0) | 2018.10.18 |