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
반응형
댓글