본문 바로가기

웹 개발/Spring

[Web_Spring] 03

실습

- 문제

dependency package
1. restaurant 클래스 선언
2. chef 클래스 선언
3. 의존 관계를 확립하고 생성자 주입 진행
4. 단위 테스트를 통해 객체 확인

qualifier package
1. restaurant 인터페이스 선언
2. steak 가격 선언(모든 레스토랑의 스테이크 가격은 기본값이 같다), sidebar 이용 여부 선언
3. outback 클래스 선언, restaurant 지정
4. vips 클래스 선언, restaurant 지정
5. vips가 default
6. 단위 테스트를 통해 객체 확인

 

 

 

1. src/main/java/com.example.ex00/dependency/Chef.java

package com.example.ex00.dependency;

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

@Component
@ToString
public class Chef {
}

 

 

 

2. src/main/java/com.example.ex00/dependency/Restaurant.java

package com.example.ex00.dependency;

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

@Component
@Data
@RequiredArgsConstructor
public class Restaurant {
    private final Chef chef;
}

 

 

 

3. src/test/java/com.example.ex00/dependency/DependencyTests.java

package com.example.ex00.dependency;

import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest //현재 클래스는 단위 테스트 클래스임을 나타내고, JUnit 라이브러리를 통해 독립적으로 단위 테스트가 가능해진다.
@Slf4j //로그 출력 라이브러리
public class DependencyTests {

    @Autowired //단위 테스트에서는 필드 주입만 가능하다.
    private Coding coding;

    @Autowired
    private Restaurant restaurant;

    @Test
    public void dependencyInjectionTest(){ 
        log.info("----------------------------");
        log.info("coding : " + coding);
        log.info("computer : " + coding.getComputer());
        log.info("----------------------------");

        log.info("----------------------------");
        log.info("restaurant : " + restaurant);
        log.info("chef : " + restaurant.getChef());
        log.info("----------------------------");
    }
}

 

 

 

4. src/main/java/com.example.ex00/dependency/qualifier/Restaurant.java

package com.example.ex00.dependency.qualifier;

public interface Restaurant {
    public int steak = 1000;
    public boolean hasSideBar();
}

 

 

 

5. src/main/java/com.example.ex00/dependency/qualifier/Outback.java

package com.example.ex00.dependency.qualifier;

import lombok.Data;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component
@Data
@Qualifier("outback")
public class Outback implements Restaurant{
    @Override
    public boolean hasSideBar() {
        return false;
    }
}

 

 

 

6. src/main/java/com.example.ex00/dependency/qualifier/Vips.java

package com.example.ex00.dependency.qualifier;

import lombok.Data;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;

@Component
@Data
@Qualifier("vips") @Primary
public class Vips implements Restaurant{
    @Override
    public boolean hasSideBar() {
        return true;
    }
}

 

 

 

7. src/test/java/com.example.ex00/dependency/QualifierTests.java

package com.example.ex00.dependency;

import com.example.ex00.dependency.qualifier.Computer;
import com.example.ex00.dependency.qualifier.Restaurant;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test; 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
@Slf4j
public class QualifierTests {
    @Autowired
    @Qualifier("desktop")
    private Computer desktop;

    @Autowired
    @Qualifier("laptop")
    private Computer laptop;

    @Autowired
    private Computer computer;

    @Autowired
    @Qualifier("outback")
    private Restaurant outback;

    @Autowired
    private Restaurant vips;

    @Test
    public void computerTest(){
        log.info("------------------------------");
        log.info("desktop : " + desktop);
        log.info("------------------------------");

        log.info("------------------------------");
        log.info("laptop : " + laptop);
        log.info("------------------------------");

        log.info("------------------------------");
        log.info("computer : " + computer);
        log.info("------------------------------");

        log.info("------------------------------");
        log.info("outback : " + outback);
        log.info("------------------------------");

        log.info("------------------------------");
        log.info("vips : " + vips);
        log.info("------------------------------");

    }

}

 

 

 

 

'웹 개발 > Spring' 카테고리의 다른 글

[Web_Spring] 07  (0) 2022.06.19
[Web_Spring] 06  (0) 2022.06.18
[Web_Spring] 05  (0) 2022.06.17
[Web_Spring] 02  (0) 2022.06.14
[Web_Spring] 01  (0) 2022.06.13