1. 컴포넌트 스캔
- 등록할 스프링 빈이 많아지면
@Bean
으로는 한계가 있음
- 자동 등록이 필요 →
@ComponentScan
@Component
가 붙은 클래스를 스프링 빈에 등록
@Component
public class RateDiscountPolicy implements DiscountPolicy {}
@Component
public class MemberServiceImpl implements MemberService{}
@Component
public class MemoryMemberRepository implements MemberRepository{}
@Component
public class OrderServiceImpl implements OrderService{}
- AppConfig는
@Bean
으로 의존관계를 주입
- 컴포넌트 스캔은
@Autowired
로 의존관계 주입
@Autowired
public MemberServiceImpl(MemberRepository memberRepository) {this.memberRepository = memberRepository;}
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
스캔 대상
@Component
@Controller
@Service
@Repository
@Configuration
필터
includeFilters
: 스캔 대상 추가로 지정
excludeFilters
: 제외할 대상 지정
빈 중복 등록과 충돌
- 자동 빈 등록 vs 자동 빈 등록 :
ConflictingBeanDefinitionException
예외 발생
- 자동 빈 등록 vs 수동 빈 등록 : 수동 빈이 우선(자동빈을 오버라이딩)