@Configuration
@ComponentScan(
basePackages = {"hello.core.member"}, // 탐색할 패키지의 시작 위치 지정
)
public class AutoAppConfig {
// 기존의 AppConfig와는 다르게 @Bean으로 등록한 클래스가 하나도 없다.
}
*@SpringBootApplication 안에 @ComponentScan이 정의되어 있다.*@Component
public class OrderServiceImpl implements OrderService {
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}
컴포넌트 스캔은 @Component 뿐만 아니라 여러 대상을 추가로 포함합니다.
@Component
컴포넌트 스캔에서 사용합니다.
@Controller
스프링 MVC 컨트롤러로 인식합니다.
@Service
특별한 처리를 하지 않지만, 보통 개발자들이 핵심 비즈니스 로직을 여기에 위치 시켜서 비즈니스 계층을 인식하는데 도움이 됩니다.
@Repository
스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해줍니다.
@Configuration
스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리를 합니다.