작성
·
27
0
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberServiceImpl(this.memberRepository());
}
@Bean
public OrderService orderService() {
return new OrderSerivceImpl(this.discountPolicy(), this.memberRepository());
}
@Bean
public MemberReposotory memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public DiscountPolicy discountPolicy() {
return new FixDiscountPolicy(); // 또는 RateDiscountPolicy()로 변경 가능
}
}
@Configuration
@ComponentScan(
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)
public class AutoAppConfig {
}
수동등록빈,자동등록빈으로 제일 상위패키지에 구현해두웠고
@Component
@Getter
public class MemberServiceImpl implements MemberService {
// private final MemberReposotory memberReposotory = new MemoryMemberRepository();
private final MemberReposotory memberReposotory;
public MemberServiceImpl(MemberReposotory memberReposotory) {
this.memberReposotory = memberReposotory;
}
@Override
public void join(Member member) {
memberReposotory.save(member);
}
@Override
public Member findMemer(Long memerId) {
return memberReposotory.findById(memerId);
}
}
여기서 오류가나는데
Could not autowire. There is more than one bean of 'MemberReposotory' type.
Beans:
memberRepository (AppConfig. java) memoryMemberRepository (MemoryMemberRepository. java)
이렇게 오루가납니다;;강의에서는 오류가안나던데 저는 왜 오류가날까요
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
임다정님께서 겪고 계신 문제는 스프링 자동 빈 등록과 수동 빈 등록이 동시에 사용되면서 발생하는 것입니다. 강의에서 설명된 바와 같이 @ComponentScan
과 @Component
를 사용하여 자동으로 빈을 등록할 때, 이미 @Configuration
클래스에서 수동으로 동일한 타입의 빈을 등록하고 있다면 스프링은 같은 타입의 두 개 이상의 빈을 발견하게 되어 충돌이 발생합니다.
중복된 빈 문제 해결: MemberRepository
타입의 빈이 두 곳에서 등록되고 있습니다. 하나는 AppConfig
클래스에서 @Bean
으로 수동 등록하셨고, 다른 하나는 MemoryMemberRepository
클래스에서 @Component
로 자동 등록되었습니다. 이로 인해 스프링이 어떤 빈을 주입해야 할지 명확하지 않게 됩니다.
해결 방법:
MemoryMemberRepository
클래스의 @Component
어노테이션을 제거하여 자동 등록을 방지하고 수동 등록만 사용하도록 설정합니다.AppConfig
클래스 내의 memberRepository
메서드를 제거하여 수동 등록된 빈을 없앱니다.참고 자료: 스프링 빈 등록에 대한 더 많은 정보는 다음 링크를 참고하세요:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.