728x90
반응형
[Spring] 해당 타입의 빈이 여러개인 경우
Field bookRepository in me.whiteship.demospring51.BookService required a single bean, but 2 were found:
- myBookRepository: defined in file [/Users/youngjin/workspace/demospring51/target/classes/me/whiteship/demospring51/MyBookRepository.class]
- youngjinBookRepository: defined in file [/Users/youngjin/workspace/demospring51/target/classes/me/whiteship/demospring51/YoungjinBookRepository.class]
Action:
Consider marking one of the beans as @Primary,
updating the consumer to accept multiple beans,
or using @Qualifier to identify the bean that should be consumed
@Autowired Annotation으로 의존성을 주입할 때,
해당 타입의 빈이 여러개인 경우 오류와 함께 해결을 위한 방법으로 3가지를 제시한다.
- Consider making one of the beans as @Primary
- updating the consumer to accept multiple beans
- using @Qualifier to identify the bean that should be consumed
@Primary Annotation 활용
@Primary Annotation을 활용하면 BookRepository를 상속받은 class들 중, 최우선으로 의존성을 부여받게 된다.
-> 최우선으로 의존성을 부여받을 Class에 @Primary Annotation을 사용한다.
package me.whiteship.demospring51;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Repository;
@Repository @Primary
public class YoungjinBookRepository implements BookRepository{
}
@Qualifier Annotation 활용
@Qualifier Annotation을 활용하면 BookRepository를 상속받은 class들 중, 최우선으로 의존성을 부여받게 된다.
-> @Autowired Annotation으로 의존성을 주입할 경우, @Qaulifier Annotation을 활용하여 최우선으로 의존성을 부여받을 class를 지정해준다
package me.whiteship.demospring51;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
@Service
public class BookService {
@Autowired @Qualifier("youngjinBookRepository")
BookRepository bookRepository;
public void printBookRepository(){
System.out.println(bookRepository.getClass());
}
}
해당 타입의 Bean 모두 주입 받기
List<> 형태로 BookRepository를 상속하는 모든 Bean들을 주입 받을 수 있다.
package me.whiteship.demospring51;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class BookService {
@Autowired
List<BookRepository> bookRepositories;
public void printBookRepository(){
this.bookRepositories.forEach(s-> System.out.println(s.getClass()));
}
}
728x90
반응형
'Programing > Spring FrameWork' 카테고리의 다른 글
[Spring] EnvironmentCapable - profile (0) | 2021.07.27 |
---|---|
[Spring] Bean의 Scope ( 싱글톤 vs 프로토타입 ) (0) | 2021.07.22 |
[Spring] Bean 주입방법 비교(xml vs Java) (0) | 2021.07.13 |
[Spring] PSA ( Portable Service Abstraction ) (0) | 2021.01.18 |
[Spring] AOP ( Aspect Oriented Programming ) (0) | 2021.01.18 |