스프링/1. 스프링 핵심 원리

32강. 충돌, 중복등록

sdafdq 2023. 7. 21. 21:50

자동 빈 등록으로, 같은 이름으로 등록을 시도할 경우 오류를 뱉는다.

BeanDefinitionStoreException

 

 

@Component
public class MemoryMemberRepository implements MemberRepository{
    private static Map<Long, Member> store = new HashMap<>();   //Map, id랑 Member 객체 간이적으로 메모리에 저장
    @Override
    public void save(Member member) {
        store.put(member.getId(), member);
    }

    @Override
    public Member findById(Long memberId) {
        return store.get(memberId);
    }
}

자동 등록

 

 

 

public class AutoAppConfig {

    @Bean(name = "memoryMemberRepository")
    MemberRepository memberRepository(){
        return new MemoryMemberRepository();
    }
}

수동등록

 

이럴 경우는?

(참고로 빈은 이름으로 구분)

 

 

이 경우는, 수동으로 등록한 빈이 자동으로 등록된 빈을 오버라이드 해 버린다.

 

 

근데, 사실 상 이런 건 개발자의 실수가 대부분이기 때문에, 최근에는 스프링 부트가, (@SpringBootApplication 붙어있는) 제대로 실행하면 그건 오류를 뱉어낸다.

 

 

디폴트가 저거고, 만약 오버라이딩 되게끔 하고 싶다면..

 

 

application-properties에 옵션을 넣어주면 된다..

그것도 오류와 함께 어떻게 하면 되는지 뱉어 준다.