본문 바로가기
Spring

(Spring)컴포턴트 스캔

by windy7271 2022. 7. 6.
728x90
반응형

컴포넌트 스캔 / 의존관계 자동 주입

 

컴포넌트 스캔을 사용하려면 @ComponentScan 을 붙여야 한다.

컴포넌트 스캔을 사용하면 @Configuration 이 붙은 설정 정보도 자동으로 등록

 

컴포넌트 스캔은 @Component 붙은 클래스를 스캔해서 스프링 빈으로 등록

@Autowired를 붙여주면 의존관계 주입을 자동으로 해준다.

스프링 빈의 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자를 사용한다.

 ex) MemberServiceImpl >> memberServiceImpl

직접 설정 가능 @Component("이름")

 

 

public class MemberServiceImpl implements MemberService{

//    private final MemberRepository memberRepository = new MemoryMemberRepository(); // MemoryMemberRepository 구현체에서 가져와서 memberRepository 넣어줌 // 직접 넣어주는거임 >>
     private final MemberRepository memberRepository;
    @Autowired // 의존관계 주입 == // ac.getBean(MemberRepository.class)
    public MemberServiceImpl(MemberRepository memberRepository) {       //생성자를 통해서 memberRepository 뭐가들어갈지 구현
        this.memberRepository = memberRepository;
    }

@Autowired 를 지정하면 스프링 컨테이너가 자동으로 스프링 빈 찾아서 주입

타입이 같은 빈을 찾아서 주입한다.

 

ComponentScan 에서 탐색할 패키지 정할 수 있다. basePackages = "패키지명"

지정하지 않으면 컴포넌트 붙인 클래스의 패키지가 디폴트

 

중복등록 / 충돌

 

1. 자동 vs 자동

ConflictionBeanDefinitionException 발생 

 

2. 수동 vs 자동

빈 등록은 된다

수동 빈이 우선권을 가져 자동 빈을 오버라이딩 을 해버린다.

 

최근 수프링 부트에서는 수동 빈 등록과 자동 빈 등록이 충돌나면 오류가 나도록 기본 값을 바꿨다.

스프링은 기본적으로 오버라이딩을 false 로 되어 있음 오버라이딩 하고 싶으면

 

appliciation properties 에 추가 .

spring.main.allow-bean-definition-overriding=true

 

  

반응형

댓글