@Component,@Controller @Repository,@Service 의 bean id 설정/ @Component 어노테이션을 상속받은 Component기능의 어노테이션들을 bean 객체화 등록할때의 bean id설정법
@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
자동 스캔 명령태그 / 자동 의존성 주입 어노테이션 context:annotation-config @Autowired/@Qulifier/@Resource/@I
의존 객체 자동 주입이란? 먼저 재밌고 쉽게 이야기로 비유해보자면 호텔이 레스토랑이 필요하며 의존성관계를 가지고있습니다. 레스토랑은 세프가 필요하고 둘은 또 의존성관계를 가지고 있��
u-it.tistory.com
하지만 그럴일은 잘 없습니다.
하나의 인터페이스당 여러 클래스를 구현한다는것은 일반적으로 레이어계층(컨트롤러 리포지토리 서비스)에서는
사실 그럴일이 거의 없습니다.
하지만 알아만 두시면 좋습니다.
자동등록할때는 아이디부여를 어떻게하냐? 이렇게 한다. 정도로 알아두시면됩니다 ^^