@Controller
public class Controller3 {}
일반적으로 우리가 Controller 어노테이션을 등록하여 bean등록을 하게되면
등록된 bean id는 해당 클래스의 클래스명 첫글자를 소문자로 변경되어 bean의 id로 등록시켜줍니다.
그렇다면 컨트롤러를 bean으로 등록할때 bean아이디를 임의로 지정해주고 싶을때는 어떻게할까요
이때는 @Controller 어노테이션 옆에 ("지정할 bean id명") 매개값으로 지정할 bean id명을 선언하합니다.
@Controller("c3")
public class Controller3 {}
@Repository와 @Service로 등록할 빈에대한 id명도 똑같이 지정할 수 있습니다.
그렇다면 언제 이런걸 사용하게되냐 ?
앞서 우리가 자동 의존성을 주입할때 선언했던 @Autowired는 타입을 기준으로 의존성을 주입합니다.
(여기서 말하는 타입은 의존성 주입이 필요한 객체의 클래스 타입을 말합니다. / 만약 클래스가 인터페이스를 구현하고있다면 해당 클래스로 생성된 객체의 타입은 인터페이스가 됩니다.)
만약 컨트롤러에 대한 인터페이스가 있고, 상위 인터페이스가 여러 컨트롤러들을 구현 상속 하고있다면
그 컨트롤러들의 인터페이스의 타입으로 여러 객체들이 빈에 등록하게 됩니다.
@Autowired는 상위 인터페이스 타입으로 찾게됩니다.
그러면 객체들의 타입이 중복, 겹치게됩니다.
이럴때는 @Qualifier 어노테이션을 쓰게되겠죠?
근데 @Qualifier를 선언 하려면 컨트롤러가 등록될때 bean id를 구분해야 하기때문에 이렇게 직접 bean id를 등록을 하는것입니다.
https://u-it.tistory.com/12?category=908594
하지만 그럴일은 잘 없습니다.
하나의 인터페이스당 여러 클래스를 구현한다는것은 일반적으로 레이어계층(컨트롤러 리포지토리 서비스)에서는
사실 그럴일이 거의 없습니다.
하지만 알아만 두시면 좋습니다.
자동등록할때는 아이디부여를 어떻게하냐? 이렇게 한다. 정도로 알아두시면됩니다 ^^
'SpringFramework > BASIC' 카테고리의 다른 글
스프링의 redirect 와 RedirectAttribute (0) | 2020.08.30 |
---|---|
Controller에서 view로 데이터 전송요청 Model / @ModelAttribute/ ModelAndView / redirectAttribute (0) | 2020.08.30 |
스프링의 어노테이션의 특징과 컨트롤러의 공통 URL 설정 (0) | 2020.08.29 |
요청 파라미터 처리법 : Sevlet 자바API request.getParameter() 과 SpringAPI 어노테이션 @RequestParam / command객체 생성 방식 + @ModelAttribute (0) | 2020.08.29 |
MVC Model1,2 및 웹 Spring의 구동 원리 (0) | 2020.08.29 |