Spring
컴포넌트 스캔과 의존관계 자동 주입 시작하기
까뮈_b
2022. 4. 20. 11:29
구성정보를 지정하는 AutoAppConfig.java 클래스를 만든다.
@Configuration
@ComponentScan(
basePackages = "hello.core.member", // 탐색할 패키지의 시작 위치를 지정한다.
basePackageClasses = AutoAppConfig.class, //AutoAppConfig가 위치한 패키지를 basePackage 삼는다.
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
// 보통 실무에서는 @Configuration을 따로 제외하지 않지만, 기존 예제코드 최대한 남기기 위해 사용함.
// 컴포넌트 스캔을 사용하면 @Configuration 이 붙은 설정 정보도 자동으로 등록되기 때문에,
// AppConfig, TestConfig 등 앞서 만들어두었던 설정 정보도 함께 등록되고, 실행되어 버리기 때문.
)
public class AutoAppConfig {
}
@Configuration : 스프링 설정 정보로 인식하고 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다.
@ComponentScan : @Component 어노테이션이 붙은 클래스를 모두 찾아서 자동으로 스프링 빈에 등록한다.
이때 스프링 빈의 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자를 사용한다.
아래의 예시 그림과 같이 동작한다.
만약 스프링 빈의 이름을 직접 지정하고 싶으면
@Component("memberService2") 이런식으로 이름을 부여하면 된다.
@Autowired 의존관계 자동 주입
생성자에 @Autowired 를 지정하면, 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입한다.
이때 기본 조회 전략은 타입이 같은 빈을 찾아서 주입한다.
getBean(MemberRepository.class) 와 동일하다고 이해하면 된다.