SpringFramework/BASIC

@Component,@Controller @Repository,@Service 의 bean id 설정/ @Component 어노테이션을 상속받은 Component기능의 어노테이션들을 bean 객체화 등록할때의 bean id설정법

유혁스쿨 2020. 8. 29. 02:10
728x90
반응형

 

@Controller
public class Controller3 {}

 

 

일반적으로 우리가 Controller 어노테이션을 등록하여 bean등록을 하게되면

등록된 bean id는 해당 클래스의 클래스명 첫글자를 소문자로 변경되어 bean의 id로 등록시켜줍니다.

 

 

컨트롤러의 클래스명의 제일 앞글자 한글자를 소문자로 bean id로 bean 등록 시켜줍니다

 

 

그렇다면 컨트롤러를 bean으로 등록할때 bean아이디를 임의로 지정해주고 싶을때는 어떻게할까요

이때는 @Controller 어노테이션 옆에 ("지정할 bean id명") 매개값으로 지정할 bean id명을 선언하합니다.

@Controller("c3") 
public class Controller3 {}

 

 

지정한 "c3"으로 bean id가 설정되어 bean등록됩니다.

 

@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

 

하지만 그럴일은 잘 없습니다.

하나의 인터페이스당 여러 클래스를 구현한다는것은 일반적으로 레이어계층(컨트롤러 리포지토리 서비스)에서는

사실 그럴일이 거의 없습니다.

하지만 알아만 두시면 좋습니다.

자동등록할때는 아이디부여를 어떻게하냐? 이렇게 한다. 정도로 알아두시면됩니다 ^^

 

728x90
반응형