1.자바 기반 컨테이너 설정
// DependencyConfig 클래스
컨텍스트를 인스턴스화할 때
@Configuration
public class DependencyConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
위 코드처럼 DependecyConfig 클래스를 생성해 @Configuration 애너테이션을 붙여 컨테이너임을 정의함과 동시에 싱글톤 기능을 부여한다.
AnnotationConfigApplicationContext
를 사용하여 스프링 컨테이너를 인스턴스화
- @Configuration 클래스가 입력으로 제공되면 @Configuration 클래스 자체가 Bean 정의로 등록되고 클래스 내에서 선언된 모든 @Bean 메서드도 Bean정의로 등록
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(DependencyConfig.class);
MyService myService = ctx.getBean(MyService.class);
myService.doStuff();
}
2. XML을 이용한 Component scan
XML방식의 component scan
<beans>
<context:component-scan base-package="탐색할 폴더 주소"/>
</beans>
- XML에 위 코드를 추가하면, @Component가 붙은 모든 클래스를 스프링 빈으로 등록해주게 된다.
- 의존 관계도 자동으로 주입하는 @AutoWired 기능도 제공한다.
Component scan


- @AutoWired는 주입이 필요한 객체에 컨테이너 생성 시 의존성 자동 주입이 이루어진다.
- 의존성 관계는 MemberRepository -> MemberService 으로 이루어진다.
컴포넌트 스캔 기본 대상
- @Component : 컴포넌트 스캔에서 사용
- @Controller & @RestController : 스프링 MVC 및 REST 전용 컨트롤러에서 사용
- @Service : 스프링 비즈니스 로직에서 사용
- 특별한 처리x
- 개발자들이 핵심 비즈니스 로직이 여기에 있다는 비즈니스 계층을 인식하는데 도움이 됨
- @Repository : 스프링 데이터 접근 계층에서 사용
- 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환
- @Configuration : 스프링 설정 정보에서 사용
- 스프링 설정 정보를 인시갛고, 스프링 빈이 싱글톤을 유지하도록 추가