여러 객체중에 특정 객체만 주입하기
스프링에서 interface를 구현한 객체가 여러개 있는경우 충돌이 발생할수 있다. 이와 같은경우 다음과 같이 해결가능하다.
해결방법
충돌이 나는 클래스 둘중에 하나에 @Primary annotation을 정의한다.
1
2
3
4
5
@Primary
@Component
public class MyBcryptPasswordEncoder implements PasswordEncoder {
...
}
위와 같이 정의해놓으면, 단독으로 주입을 할경우 충돌을 해결할수 있다.
여러 객체를 주입하기
1
2
@Autowired
private Map<String, PasswordEncoder> passwordEncoderMap;
위와 같은방법으로 Component로 등록한 여러 클래스들을 주입할수 있다. 이때 Map의 key는 Bean name이 들어간다.(myBcryptPasswordEncoder, …) 그리고 value에는 객체가 주입된다.
이밖에도 Array,List,Set등에도 여러객체가 주입가능하다.