@Primary?
동일한 클래스의 Bean들 중 가장 기본으로 쓰이는 Bean을 지정하는 역할 @Primary가 있으면 동일한 클래스의 Bean이 있고 따로 특정 Bean을 지정하지 않아도 Spring이 자동으로 @Primary가 달린 Bean을 사용한다.
@Qualifier?
한정자라는 의미로 특정 Bean을 특정한 이름으로 한정하는 역할을 한다. @Qualifier("한정자")의 형식으로 사용되며 해당 주석을 달고 나면 다른 Bean이나 클래스에서 동일한 방식으로 해당 Bean을 불러서 사용할 수 있게 된다. 즉 동일한 클래스의 여러 Bean이 있을 때 하나의 Bean을 특정한다고 생각하면 된다.
@Primary VS @Qualifier ?
두개의 설명만 보면 하는 역할이 비슷해보인다. 하지만 동일한 클래스의 Bean중 하나를 특정한다는 측면으로 봤을 때는 동일한 역할을 하지만 @Primary는 무조건 하나의 Bean으로 연결하고 @Primary가 바뀌지 않는 이상 사용되는 Bean이 달라지지 않는다. 그리고 해당 Bean을 사용하기 위해서 사용시에 따로 지정하는 것도 필요하지 않다. 그에 반해 @Qualifier는 한정자의 이름에 따라서 사용되는 Bean이 달라지고 또한 사용시에도 한정자 설정시와 똑같이 어떤 한정자를 사용할 건지 Spring에게 알려줘야 한다는 점이 다르다.
이 두개 중 어떤 걸 사용하냐에 대한 판단은 전적으로 사용자에게 달려있다. 사용자가 코드를 작성할때 Bean이나 클래스의 입장에서 보고 어떠한 주석이 더 효율적인지 보고 그에 맞게 사용하면 되는 것이다.
@Component?
원하는 파일에 해당 주석을 달면 Spring이 해당 주석이 있는 클래스의 경우 사용자가 따로 클래스 객체를 만들지 않아도 해당 클래스를 사용한다고 판단하면 객체를 생성해준다. 단 실행 파일에도 @ComponentScan 주석을 달아야지 사용이 가능하다. 만약 @ComponentScan뒤에 패키지 경로가 없으면 실행파일이 있는 패키지의 component를 스캔하고 특정 경로가 있으면 해당 경로의 패키지에 있는 component들을 검색한다. 즉 @Component가 클래스에 붙어있을 경우 해당 클래스의 인스턴스는 Spring이 관리하게 된다.
'SpringBoot' 카테고리의 다른 글
| [Udemy] Spring Boot 3 - Section 4 : Spring Framework 고급기능 살펴보기 (1) | 2023.11.09 |
|---|---|
| [Udemy] Spring Boot 3 - 의존성 주입 (2) | 2023.11.07 |
| [Udemy] Spring Boot 3 - Java Bean, POJO, Spring Bean 차이 (6) | 2023.11.01 |
| [Udemy] SpringBoot 3 - Spring Bean (0) | 2023.11.01 |
| [Udemy] SpringBoot 3 - 강한 결합 vs 느슨한 결합 (4) | 2023.10.31 |