WIL

33주차 - 강의 + 프로젝트

haedal-uni 2022. 5. 1. 21:28
728x90

조회 빈이 2개 이상 - 문제

@Autowired 는 타입(Type)으로 조회한다.

타입으로 조회하기 때문에, 마치 아래 코드와 유사하게 동작한다. (실제로는 더 많은 기능을 제공한다.) ac.getBean(DiscountPolicy.class)

 

 

 

* 기존 코드

@Component
public class RateDiscountPolicy implements DiscountPolicy {
}
public class FixDiscountPolicy implements DiscountPolicy{
}

 


 

스프링 빈 조회에서 학습했듯이 타입으로 조회하면 선택된 빈이 2개 이상일 때 문제가 발생한다.

 

DiscountPolicy 의 하위 타입인

FixDiscountPolicy , RateDiscountPolicy 둘 다 스프링 빈으로 선언해본다.

@Component
public class RateDiscountPolicy implements DiscountPolicy {
}
@Component
public class FixDiscountPolicy implements DiscountPolicy{
}

 

 

 

 

 

FixDiscountPolicy에 @Component를 추가한 후 test를 전부 실행시키면 

basicScan()에서 오류가 뜬다. (AutoAppConfigTest)

 

하나의 빈을 기대했는데 fixDiscountPolicy , rateDiscountPolicy 2개가 발견되었다고 알려준다.

 

 

 

 

이때 하위 타입으로 지정할 수 도 있지만,

하위 타입으로 지정하는 것은 DIP를 위배하고 유연성이 떨어진다.

 

그리고 이름만 다르고, 완전히 똑같은 타입의 스프링 빈이 2개 있을 때 해결이 안된다.

 

스프링 빈을 수동 등록해서 문제를 해결해도 되지만, 의존 관계 자동 주입에서 해결하는 여러 방법이 있다.

 


프로젝트

1.

@Controller

return 으로 "index" 입력 시 index.html 호출 (view 반환)

 

@RestController (@Controller + @ResponseBody)

사용 후 return으로 "index" 입력 시 index text가 입력 됨(json 형태로 객체 데이터 반환)

 

➡️ 위와 같은 이유로 현재 html 호출하는 코드와 아닌 코드로 분리하여 파일을 나눔

 

 

 

 

 

2. 회원가입할 때 nickname을 세션에 저장해서 다른 페이지에서도 해당 닉네임 받아올 수 있게 함

 

* 로그아웃하고도 저장이 되는지 test 시도

로그아웃 후 다른 아이디로 회원가입 진행 후 로그인 진행 → 새로운 닉네임으로 저장 되는 것 확인

 

 

 

참고 :  [Spring] @Controller와 @RestController 차이

 

728x90

'WIL' 카테고리의 다른 글

35주차  (0) 2022.05.15
34주차  (0) 2022.05.08
32주차  (0) 2022.04.24
31주차 - 오류  (0) 2022.04.17
30주차 - 필터(includeFilters, excludeFilters)  (0) 2022.04.10